1

ここには htaccess に関する何百もの投稿があることは知っていますが、自分の状況に合った投稿が見つからないようです。

2 つの書き換えルールが発生しています。

1 つ目は、example.com/filename.php を example.com/filename/ に変換し、example.com/filenameA-filenameB.php を example.com/filenameA/filenameB/ に変換します。

2 つ目は、要求された URL の末尾にスラッシュがない場合、末尾にスラッシュを追加します。

foo.php が存在しない example.com/foo や example.com/foo/ などの間違った URL を入力するまでは、すべて問題なく動作します。「ページが正しくリダイレ​​クトされていません」というメッセージが表示され、アドレス バーに「example.com/foo.php.php.php.php.php.php.php.php...」と表示されます。404 ページにリダイレクトできるように 404 を取得したいだけですが、何を試してもうまくいかないようです。

ご協力いただきありがとうございます!

RewriteEngine On 
RewriteBase /

RewriteRule ^(.+)/(.+)//?$ $1-$2.php [NC,L]
RewriteRule ^(.+)//?$ $1.php [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://example.com/$1/ [L,R=301]
4

1 に答える 1

0

リダイレクトに、で終わるものがリダイレクトされないという条件を追加する必要があります.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ http://example.com/$1/ [L,R=301]

最初の書き換え後、URIは/foo.php最終的になります。foo.phpが存在しない場合は、2番目のルールが適用されます。これも、で終わらないため、http:/ //example.com/fooにリダイレクトされます。 .php /の場合、最初のルールセットはそれを/foo.php.phpに変更します。これは存在せず、スラッシュを終了しないため、2番目のルールが適用され、http://example.com/foo.phpにリダイレクトされます。 php/などなど。


編集:

存在しないPHPファイルがサーバーから要求された場合、サーバーは404ではなく、「入力ファイルが選択されていません」というメッセージで応答します。

これを追加してみてください:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule \.php$ - [R=404]

これは多かれ少なかれあなたが読んだことですが、ルールは.phpで終わるものと一致し、404ページにリダイレクトされます。

于 2012-05-19T22:24:15.563 に答える