我正在重写这个
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
但是,如果我尝试输入旧网址,它仍然是可能的,那么我怎样才能重定向到新网址而不是陷入循环呢?
我正在重写这个
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
但是,如果我尝试输入旧网址,它仍然是可能的,那么我怎样才能重定向到新网址而不是陷入循环呢?
首先,添加这条规则:
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 的请求已经在上面被捕获,所以它们不会到达这一行。这将按预期进行重定向,并且您不应该有无限循环。