私は「を使用して末尾のスラッシュを削除する問題があります .htaccess
ファイル サブディレクトリ内に存在する.
通常、これは簡単な修正です。なぜなら、 類似、しかし構造的に異なる問題。これらのソリューションでは、 .htaccess
(ルートレベルではなく)サブディレクトリに存在するファイル。
たとえば、次のファイル構造があるとします。
/subfolder/.htaccess
/subfolder/index.php
...
リクエストの末尾のスラッシュをすべて削除したい http://server/subfolder/
。例えば、
http://server/subfolder/file/
にリダイレクトする必要がありますhttp://server/subfolder/file
http://server/subfolder/news/12/
にリダイレクトする必要がありますhttp://server/subfolder/news/12
私は現在、次のルールを持っています /subfolder/.htaccess
:
RewriteEngine On
# Strip ending slash
RewriteRule ^(.*)/$ $1 [L,R=301]
# Pipe request to controller
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
このルールを使用すると、上記の例は以下にリダイレクトされます。
http://server/subfolder/file/
リダイレクト先http://server/os/path/to/subfolder/file
http://server/subfolder/news/12/
リダイレクト先http://server/os/path/to/subfolder/12
つまり、からの相対パスを使用する代わりに .htaccess
ポイント(この場合、 /subfolder
)、オペレーティングシステムのパスを使用しています。
修正することで状況を改善できます .htaccess
使用する RewriteBase
:
# Strip ending slash
RewriteBase /subfolder
RewriteRule ^(.*)/$ $1 [L,R=301]
これは機能しますが、 これは望ましい解決策ではありません なぜなら、ファイルを /subfolder
に /newsubfolder
、編集する必要があります .htaccess
に RewriteBase /newsubfolder
。つまり、これらのファイルが別のサブフォルダーに移動されるたびに、 .htaccess
ファイルは手動で更新する必要があります。したがって、ファイルのセットは移植性がありません。 手動設定 の .htaccess
使用するファイル 絶対パス.
よりポータブルで、どのディレクトリにもドロップでき、絶対パスに関係なく機能するソリューションが欲しいです。できれば、このソリューションは利用しないでしょう RewriteBase
私の理解から、これは現在のサブディレクトリに設定できず、絶対パスを参照する必要があるためです。
私は数時間かけて解決策ですが、私が見たアイデアのほとんどは、ルートディレクトリを使用したり、環境変数を使用した厄介なハッキングを含んだりしました。どんなアイデアも素晴らしいでしょう。
回答:
回答№1は1サブルールの.htaccessでこのルールを使用できます。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} s/+(.+?)/+[?s]
RewriteRule /$ /%1 [R=302,NE,L]
# generate rewrite base dynamically
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::2$
RewriteRule ^(.*)$ - [E=BASE:%1]
# Pipe request to controller
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ %{ENV:BASE}index.php [L]