web-dev-qa-db-ja.com

ディレクトリをターゲットとするRewriteRulesは、無償のリダイレクトをもたらします

.htaccessに標準のCMSのようなRewriteRuleが設定されています。

RewriteRule ^(.+)$ index.php?slug=$1

ルートディレクトリにfooというディレクトリがあるとします。何らかの理由で、ページにアクセスするとリダイレクトが発生します:

http://example.com/foohttp://example.com/foo?slug=fooにリダイレクトします

ディレクトリを削除すると問題は解決しますが、残念ながらオプションではありません。誰かが回避策を知っていますか?

2
MapDot

試して、

DirectorySlash off

リダイレクトを生成する書き換えではなく、mod_dirです。

2
covener

RewriteRule putの前:

RewriteCond %{REQUEST_FILENAME} !-d

これは、ディレクトリfooが存在するかどうかをチェックします。存在する場合は、書き換えルールを作成しません。

また、リダイレクト先foo?slug=fooからindex.php?slug=$1にどのように到達したかわかりません。


確認しましたが、欠落している/を修正するには、このルールセットの前にもう1つのルールセットが必要です

RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L]

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)$ index.php?slug=%{REQUEST_URI} [QSA,L]

これは魅力のように機能するはずです。

1
Hrvoje Špoljar