0

我正在重写这个

http://myweb.com/post/5/title-of-the-post(新网址)

http://myweb.com/post.php?id=5(旧网址)

我通过以下方式实现了这一目标:

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

但是,如果我尝试输入旧网址,它仍然是可能的,那么我怎样才能重定向到新网址而不是陷入循环呢?

4

1 回答 1

1

首先,添加这条规则:

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

这将强制立即重定向,并且不会处理任何进一步的规则。发布/什么/曾经的请求将不符合此规则并跳过。请注意,您必须创建一个通用的文章标题,因为 .htaccess 无法知道要使用的标题。

接下来,添加此规则:

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

对 post.php 的请求已经在上面被捕获,所以它们不会到达这一行。这将按预期进行重定向,并且您不应该有无限循环。

于 2012-12-13T19:00:27.257 回答