0

mod_rewriteを使用してよりクリーンなURLを生成しようとしています。

.htaccessに次のものがあります

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^mypage.php$ https://%{HTTP_HOST}/mypage [R=301,L]

目的は、https://mysite.com/mypage.phpから https://mysite.com/mypageに移動することです

これにより、404エラーが発生します。私は実際にディレクトリmypage/を持っていません。しかし、私の理解では、mod_rewriteを機能させるために実際にmypageを用意する必要はありません。私は何が間違っているのですか?

4

1 に答える 1

1

mod_rewrite 出力は存在する必要がありますか?

書き換えルールの置換ターゲットは、存在するか、置換ターゲットが存在する他のルールと一致する必要があります。ブラウザを存在しない URL にリダイレクトするだけなので、間違いなく 404 エラーが発生します。

別のルールを追加してに書き直すこともでき/mypage ます/mypage.phpが、そうすると無限ループが作成されます。「mypage.php」は「mypage」にリダイレクトされ、「mypage.php」に書き換えられ、「mypage」にリダイレクトされます。

上記のルールに追加の制約を追加する必要があります。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /mypage\.php
RewriteRule ^mypage.php$ https://%{HTTP_HOST}/mypage [R=301,L]

実際のリクエストが mdeの場合にのみリダイレクト/mypage.phpし、他のルールによって変更される可能性のある URI をチェックするだけではないようにします。次に、内部的に書き直す必要があります。

RewriteRule ^mypage/?$ /mypage.php [L]

これがどのように機能するかについてのより良い説明については、この回答の上部を参照してください: https://stackoverflow.com/a/11711948/851273

于 2012-09-20T21:42:02.700 に答える