質問編集履歴

2

2021/04/21 01:27

投稿

yuuAn
yuuAn

スコア44

test CHANGED
File without changes
test CHANGED
@@ -114,7 +114,7 @@
114
114
 
115
115
 
116
116
 
117
- ### 解決案
117
+ ### 試したこと
118
118
 
119
119
 
120
120
 
@@ -124,7 +124,7 @@
124
124
 
125
125
 
126
126
 
127
- #### 1. Next.js でレスポンスの location のドメインを書き換える
127
+ #### 1. Next.js でレスポンスの location のドメインを書き換える
128
128
 
129
129
 
130
130
 
@@ -132,41 +132,55 @@
132
132
 
133
133
 
134
134
 
135
- #### 2. Apache が返すリダイレクト先をパスみにする
136
-
137
-
138
-
139
- Apache が返すリダイレクトポンスを、Next.js が返すもと同じように、ドメインを含まない `/blog/` のみにすれば、`b.example.com` がクライアントに伝わこともないと思ったのですが、そうすると、Next.js が `/blog` にリダイレクトし、続いて Apache が `/blog/` にリダイレクトし、更に Next.js が……と、無限ループになってしまうので、この方法は断念しました。
140
-
141
-
142
-
143
- #### 3. 特定パスのみ Trailing Slash を付け
144
-
145
-
146
-
147
- Next.js で、特定のパスのみTrailing Slash を付けるという設定ができればいいと思って調べたのですが、そのような設定はできなさそうでした。
135
+ それと、そうすると Next.js が `/blog` にリダイレクトし、続いて Apache が `/blog/` にリダイレクトし、更に Next.js が……と、無限ループになってしまうで、この方法は断念しました。
136
+
137
+
138
+
139
+ #### 案 2. Apache が返すリダイレクト先をパスのみにする
140
+
141
+
142
+
143
+ Apache が返すリダイレクトレスポンスを、Next.js が返すもと同じように、ドメインを含まない `/blog/` のみにすれば、`b.example.com` がクライアントに伝わこともないと思ったのですが、こちらも無限ループが発生してしまいます。
144
+
145
+
146
+
147
+ #### 案 3. 特定のパスのみ Trailing Slash を付ける
148
+
149
+
150
+
151
+ Next.js で、特定のパスのみ、Trailing Slash を付けるという設定ができればいいと思って調べたのですが、方法を見つけられませんでした。
152
+
153
+
148
154
 
149
155
  もしこれが実現できたら、Next.js 側で必ず Trailing Slash が付与されるため、Apache が Trailing Slash のためにリダイレクトすることはなくなります。
150
156
 
151
157
 
152
158
 
153
- ちなみに、Next.js Trailing Slash について何もしないという設定にもきなさそうでした。
159
+ ちなみに、Vercel Trailing Slash について何もしないという設定があるのすが、
154
-
160
+
155
- Vercel には Trailing Slash について何もしないという設定があるですが、Next.js にはなさそうでした。
161
+ Next.js には Trailing Slash を付けるか付けないどちらかのオプションしかなさそうでした。
162
+
163
+
164
+
156
-
165
+ 実現できたらこの方法が一番副作用が少なくてよいのですが。
157
-
158
-
166
+
167
+
168
+
159
- #### 4. Apache にリクエストを転送する際に Trailing Slash を付ける
169
+ #### 4. Apache にリクエストを転送する際に Trailing Slash を付ける
160
-
161
-
162
-
170
+
171
+
172
+
163
- Next.js に来たアクセスを Apache に転送する際に、Trailing Slash を付けられないかと思ったのですが、色々試してみてダメでした。
173
+ Next.js に来たアクセスを Apache に転送する際に、Trailing Slash を付けられないかと思ったのですが、Wordpress は管理画面などでファイル名のみを指定た相対リンクが作られるので、Trailing Slash なしだとリンク先が変わっしまい、ダメでした。
174
+
164
-
175
+ 現在のアドレスと相対パスから、絶対パスを生成するのはブラウザなので、Next.js の裏側でだけ Trailing Slash を付けても意味がありません。
176
+
177
+
178
+
165
- これについては、調べれば方法があるのかもしれせん
179
+ 一応試した方法を書いておき
166
-
167
-
168
-
180
+
181
+
182
+
169
- Next.js では `next.config.js` 以下のように設定しています。
183
+ 現在の Next.js `next.config.js` の設定は以下のようになっています。
170
184
 
171
185
 
172
186
 
@@ -192,15 +206,19 @@
192
206
 
193
207
 
194
208
 
195
- 単純に `destination` の `:path*` の後ろに `/` を付けるだけだと、ファイルにも `/` が付いてしまうため例えば `app.css/` のよになってしまいま
196
-
197
-
198
-
199
- もしこれが実現できたら、クライアントが `https://example.com/blog/` にアクセスすると、Next.js が `/blog` へのリダイレクトを返し、それを受けてクライアントが `https://example.com/blog` にアクセスすると、Next.js はそれを Apache の `https://b.example.com/blog/` 転送し、Apache は Trailing Slash が付いているのでリダイレクトはせずに、Wordpress のレスポンスを返すようになります。
200
-
201
-
202
-
203
- #### 5. Apache & Wordpress で Trailing Slash なしを受け入れる
209
+ これに対して、単純に `destination` の `:path*` の後ろに `/` を付けてみたのですが、ファイルにも `/` が付いてしま、うませんでした
210
+
211
+ 例えば、`app.css` が `app.css/` になってしまいました。
212
+
213
+
214
+
215
+ `:path*` の部分をもう少し詳細に設定する方法があればとも思ったのですが、前述の相対パスの問題があったため諦めました。
216
+
217
+
218
+
219
+
220
+
221
+ #### 案 5. Apache & Wordpress で Trailing Slash なしを受け入れる
204
222
 
205
223
 
206
224
 
@@ -282,9 +300,15 @@
282
300
 
283
301
  mod_rewrite で `/blog/hoge` を `/index.php` に渡すことができているので、同じようにして `/blog` も `index.php` に渡すことができそうな気がするのですが、mod_rewrite に詳しくなく、やり方がわかりません。
284
302
 
303
+
304
+
285
- でも、解決案が一番現実的気がてい
305
+ ただ、この方法うまくいったとしても、の案と同じように、リンク先相対パスにってるリンクは機能しません
306
+
307
+
308
+
309
+
310
+
286
-
311
+ いくつか案を考えてそれぞれ試してみましたが、問題なく解決できそうなのは 案 3. だけでした。
287
-
288
312
 
289
313
 
290
314
 

1

思い付いたけど諦めた解決案を追記しました。最後の解決案に一番期待している旨を追記しました。

2021/04/21 01:27

投稿

yuuAn
yuuAn

スコア44

test CHANGED
File without changes
test CHANGED
@@ -132,7 +132,15 @@
132
132
 
133
133
 
134
134
 
135
- #### 2. 特定のパスのみ Trailing Slash を付け
135
+ #### 2. Apache が返すリダイレクト先をパスのみにす
136
+
137
+
138
+
139
+ Apache が返すリダイレクトレスポンスを、Next.js が返すものと同じように、ドメインを含まない `/blog/` のみにすれば、`b.example.com` がクライアントに伝わることもないと思ったのですが、そうすると、Next.js が `/blog` にリダイレクトし、続いて Apache が `/blog/` にリダイレクトし、更に Next.js が……と、無限ループになってしまうので、この方法は断念しました。
140
+
141
+
142
+
143
+ #### 3. 特定のパスのみ Trailing Slash を付ける
136
144
 
137
145
 
138
146
 
@@ -148,7 +156,7 @@
148
156
 
149
157
 
150
158
 
151
- #### 3. Apache にリクエストを転送する際に Trailing Slash を付ける
159
+ #### 4. Apache にリクエストを転送する際に Trailing Slash を付ける
152
160
 
153
161
 
154
162
 
@@ -192,7 +200,7 @@
192
200
 
193
201
 
194
202
 
195
- #### 4. Apache & Wordpress で Trailing Slash なしを受け入れる
203
+ #### 5. Apache & Wordpress で Trailing Slash なしを受け入れる
196
204
 
197
205
 
198
206
 
@@ -272,6 +280,14 @@
272
280
 
273
281
 
274
282
 
283
+ mod_rewrite で `/blog/hoge` を `/index.php` に渡すことができているので、同じようにして `/blog` も `index.php` に渡すことができそうな気がするのですが、mod_rewrite に詳しくなく、やり方がわかりません。
284
+
285
+ でも、この解決案が一番現実的な気がしています。
286
+
287
+
288
+
289
+
290
+
275
291
  ### 補足情報(FW/ツールのバージョンなど)
276
292
 
277
293