2011-10-12 14 views
5

私は別のバージョンのフォルダを使用するには、以下のルールを使用しています:書き換えモジュール(ストリップスラッシュ)

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 

しかし:

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

は、私のような構造を持っていますユーザーは表示されます:

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/

これは私が他のバージョンについて知ることを望まないため、問題です。

どのように問題を解決できるか考えてみましょうか?

+0

素晴らしい質問です。 – djhaskin987

答えて

1

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

"DirectorySlash Off" directiveでmod_dirの自動リダイレクトを無効にすることができます。しかし、リライトが起こる前にリダイレクトを含めることで、後続のスラッシュを追加することができます。

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

このまたは同等の何かあなたが/version/020に書き換えを行う前に、うまくいけば、それを修正する必要があります。

編集:実際には、今考えているので、スラッシュの後ろにリライト/リダイレクトすると、DirectorySlashをオフにする必要はありません。 mod_dirに到達します。とにかくそれはとにかく安全ですか?