0

わかりました、私は自分の URL をクリーンアップしようとしています... しかし、惨めに失敗しています: のような URL が欲しいですmysite.com/front_door/some_url_here。しかし、500エラーが発生し続けます。以下は私の .HTACCESS です。HTACCESS を使用するのは 3 回目か 4 回目なので、間違いがあると思います。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*[^/]) $1.php [L]
RewriteCond %{REQUEST_URI} ^/index\.php$
RewriteCond %{QUERY_STRING} ^pid=(([0-9a-zA-Z\-]+))$
RewriteRule ^(.*)$ http://localhost/page/%1.php [R=302,L]
4

1 に答える 1

0

これが 500 サーバー エラーの原因です。

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

正規表現はリクエストの最初または最後と一致しないため、文字通り何でも一致する可能性があります。つまり、あなたがに行くなら

http://mysite.com/index.php?pid=1234

そして、リダイレクトされます

http://localhost/page/1234.php?pid=1234

リクエスト/page/1234.phpは regex: を介して最初のルールに一致し、(.*[^/])に書き換えられ/page/1234.php.phpます。次に、書き換えエンジンがループし、同じことが再び起こります。最初のルールが一致し、次に次のように書き換えられ/page/1234.php.php.phpます。500 エラーが発生するまで続行します。

そのルールで何をしようとしているのかはわかりませんが、リクエスト/fileしてサービスを受けることができるようにしたいと考えています/file.php。ルールは次のようにする必要があります。

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

?また、ターゲットの最後に が必要なため、クエリ文字列は引き続き 2 番目のルールのリダイレクトの最後にあります。

RewriteRule ^(.*)$ http://localhost/page/%1.php? [R=302,L]

それがなければ?、クエリ文字列は自動的に末尾に追加されます。

于 2013-09-30T01:48:05.017 に答える