- 1. 概要
- 2. 設定 失敗1
- 3. 設定 失敗2
- 4. 設定
1. 概要
「URL」の末尾のスラッシュ。
専門的に言うと、「trailing slash」ちゅうことになりますな。
「/index.html」「/index.php」と書く代わりに「/」のみを書いてやるという・・・。
で・・・。
https://ドメイン/サブディレクトリ/
にアクセスさせているのに
$_SERVER['REQUEST_URI']
を見てみると
/サブディレクトリ
になっておる。
昔々、「index.html」にアクセスさせるには、末尾にスラッシュを付けた方が早いのよと言われて、その言いつけをずっと守っていたのに。
本ページは、下記のサイトを参考にさせていただきました。
「【htaccess】URL の最後に「/」を付ける方法」
途中、下記のサイトを参考にさせていただきました。
「Laravel で URL 末尾のスラッシュを付ける方法。 」
「laravel でトレイリングスラッシュを有効にする方法」
実は、他に、ソースコードをいじる方法が、下記のサイトにあったのですが
「Laravelで /(トレイリング スラッシュ)がついている URL を扱うには」
「Laravel でトレイリングスラッシュを使う方法」(2024年8月6日、リンク切れになりました)
これを真似ようとしたのですが、どうにもエラーになっちゃうので・・・。
結局「.htaccess」をいじるのが、行数も少ないし、お手軽なので・・・。
うまく動かなくなったら、また考えます。
2. 設定 失敗1
仕掛けは
public/.htaccess
の
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
であります。
全部、コメントアウトして、代わりを書くのだそうな。
# Redirect Trailing Slashes If Not A Folder...
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} (.+)/$
#RewriteRule ^ %1 [L,R=301]
# Add Trailing Slash If Not A File...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} (.+[^/])$
RewriteRule ^ %1/ [L,R=301]
ですと。
この設定、一回やって、また元に戻したのは何故だったろう?
今、記憶にないので、再度設定するのだ(2022年6月9日)。
3. 設定2
で、その日のうちに思い出したのだ。
前項の設定を行うと・・・。
すべてのページに「/」がついちゃうのです。
つまり
https://freebsd.sing.ne.jp
上が下になるのはいいというか、それを意図しているのですが
https://freebsd.sing.ne.jp/
意図しないことに
https://freebsd.sing.ne.jp/hogehoge.html
が
https://freebsd.sing.ne.jp/hogehoge.html/
になっちゃうのです。
これは、「404」になるのがあたり前ですわな。
今度は
public/.htaccess
の
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
をコメントアウトするところまでは同じで。
代わりに書くものが
#「/」補完
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.[^/\.]+$
RewriteRule .* %{REQUEST_URI}/ [R=301,L]
になります。
今度は、すぐにアホなことには、なっておりませぬ。
スクレイピングチェックしてみますか・・・。
4. 設定
前項の設定を行って、スクレイピングチェックを行ったり、自分の目で確かめたりしていましたが・・・。
自分で確認すると、明らかに、遅いし、サーバ側で、「httpd」が、異常にぶん回っているようなのです。
えっと、これを詳しく説明できない。
とりあえず、リダイレクトがばんばん、起こっているようなのです。
「「リダイレクトが繰り返し行われました。」のエラーとは?リダイレクトループの原因と対処法」に掲載されているような、サーバ側の状態ですな。
う~ん。困った。
で、よくわからないなりに、「.htaccess」を再度ながめているとどうも
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
が、「/」がついているものをとっぱらっちゃってるんだな。
単に、これを全部コメントアウトしてみました・・・。
すると、あら不思議(いや、不思議でもなんてもねぇんだがな)。
意図通り、少なくとも、最上位以外は、「/」がキープされるようになりました。
なんだぁ・・・。
リダイレクトなくしゃいいのかと、勢い余って
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
の部分までコメントアウトしようとしましたら、何も表示できなくなりましたので、ここまで消しちゃダメってことですな。
まだ不十分なのが。
最上位の「/」が消せないこと。
内部の「<img src="" alt="">」で記述している画像ファイルが存在しないとき、気が遠くなるほど表示更新に時間がかかること。
なのですが、前よりはまし。
|