0

これを書き直しています

http://myweb.com/post/5/title-of-the-post(新しいURL)

http://myweb.com/post.php?id=5(古いURL)

私はこれを次のように達成しました:

RewriteEngine On
#Options +FollowSymLinks
RewriteRule ^post/(.+)/(.+) post.php?id=$2

しかし、古いURLを入力しようとしても、それは可能です。新しいURLにリダイレクトして、ループに陥らないようにするにはどうすればよいでしょうか。

4

1 に答える 1

1

まず、次のルールを追加します。

RewriteCond %{QUERY_STRING} id=([0-9]+)
RewriteRule ^post\.php$ post/%1/article [R=301,L]

これにより、即時のリダイレクトが強制され、それ以上のルールは処理されません。post/what/ever へのリクエストはこのルールに一致せず、スキップされます。.htaccess は使用するタイトルを知る方法がないため、一般的な記事のタイトルを作成する必要があることに注意してください。

次に、次のルールを追加します。

RewriteRule ^post/([0-9]+)/(.*)$ post.php?id=$1 [L]

post.php へのリクエストは既に上でキャッチされているため、この行には到達しません。これにより、期待どおりにリダイレクトが行われ、無限ループが発生することはありません。

于 2012-12-13T19:00:27.257 に答える