5

次のルールを使用して、異なるバージョンのフォルダーを使用しています。

RewriteEngine On
RewriteRule .* - [E=VERSION:020]
RewriteRule ^versions/(.*)$ versions/$1 [L]
RewriteRule ^(.*)$ versions/%{ENV:VERSION}/$1 [L]

私は次のような構造を持っています:

http://domain.com/versions/020/
http://domain.com/versions/020/th?=1
http://domain.com/versions/020/myfolder/
http://domain.com/versions/020/myfile.html

ただし、ユーザーには次の情報が表示されます。

http://domain.com/
http://domain.com/th?=1
http://domain.com/myfolder/
http://domain.com/myfile.html

バージョン番号を示すスラッシュに最後の問題があります。

2 番目のエントリ ポイントは (まだ機能しています):

http://domain.com/site/

しかし、次のように、ユーザーが URL を入力して末尾のスラッシュを省略した場合の問題:

http://domain.com/site

ユーザーには、次のようなバージョン番号が表示されます。

http://domain.com/versions/020/site/

ユーザーに他のバージョンを知られたくないので、これは問題です。

どうすれば問題を解決できますか?

4

1 に答える 1

1

これはmod_dirに干渉しているようです。これは、デフォルトで、ブラウザがディレクトリにアクセスしようとしたときに末尾のスラッシュがない場合にブラウザをリダイレクトします。何が起こっているのかというと、リライトが発生していて、mod_dirに変更/siteすると、ブラウザがにリダイレクトされます。したがって、ブラウザはロケーションバーにversions/020のものを表示します。/versions/020/sitehttp://domain.com/versions/020/site/

「DirectorySlashOff」ディレクティブを使用して、mod_dirの自動リダイレクトをオフにすることができます。ただし、書き換えが行われる前にリダイレクトを含めることで、とにかく末尾のスラッシュを追加することをお勧めします。

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [R,L]

書き直しを行う前に、これまたは同等のものを/version/020修正する必要があります。

DirectorySlash編集:実際、私が考えているのは、末尾のスラッシュがないときに書き換え/リダイレクトする場合、mod_dirに到達するまでに常に末尾のスラッシュがあるため、オフにする必要はありません。多分それはとにかく安全であるために?

于 2011-10-22T02:59:39.770 に答える