1

ええ、mod_rewrite は私を夢中にさせています。

問題は次のとおりです。

私のhtaccess

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$    index.php?url=$1 [L,QSA]

ページにアクセスしようとするとadvantix(アドレスは でしたwww.mywebsite.com/advantix)、リダイレクトされますadvantix/?url=advantix

アクセスログを見ると真ん中に怪しい301が入ってる

"GET /advantix HTTP/1.1" 301 335 "-" "Mozilla/5.0"
"GET /advantix/?url=advantix HTTP/1.1" 200 186 "-" "Mozilla/5.0"

重要な詳細が 1 つあります。advantix はディレクトリです。

したがって、そのルールにコメントするadvantixと、フォルダーに移動してファイルを一覧表示します。

/一致するフォルダーがある場合に自動的に適用されるのはなぜですか?

フォルダにアクセスしたくない、へ index.php?url=advantix の呼び出しで advantixアクセスしたい。

rewriteLogs も持っていますが、それ以上は役に立ちませんでした。私の vhost conf にはのDirectoryタグが付いOptions Allていますが、役立つ場合は、それについてあまり知りません。

4

3 に答える 3

1

DirectorySlash Apache ディレクティブをオフにします。これが 301 リダイレクトを引き起こしているようです。

DirectorySlash Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
于 2010-06-08T20:48:35.747 に答える
0

これを一度試してください:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$    index.php?url=$1 [L,QSA]
于 2010-06-08T15:19:54.150 に答える
0

同様の問題がありました。私の解決策は、「悪い」パス (末尾にスラッシュのないディレクトリ) で URL の書き換えを停止することです。

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ $1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/*$ index.php?route=$1 [L,QSA]
于 2011-02-23T06:20:52.803 に答える