当它应该是HTTP 301时,RewriteRule返回HTTP 200

时间:2012-02-07 05:27:23

标签: .htaccess mod-rewrite redirect curl url-rewriting

以下RewriteRule将来自网址shows.php?id=review-1的流量转发到服务器端控制器文件,该文件创建了一个SEO友好网址,并使用301重定向进一步重定向。使用CURL,重定向到控制器文件显示为200,指向控制器文件的直接链接显示为301.

这是我的RewriteRule

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (^|&)id=review-[0-9]+(&|$) [NC]
RewriteRule ^ /controllers/redirectseo.php? [R=301,L,NC,QSA]

以下是我的CURL来电的结果:

curl -I http://www.defunctgames.com/shows.php?id=review-1
HTTP/1.1 200 OK

curl -I http://www.defunctgames.com/controllers/redirectseo.php?id=review-1
HTTP/1.1 301 Moved Permanently

更新1:

我试图修改我的RewriteRule以摆脱[QSA],也许这就是问题所在。它仍然没有返回301.以下重写规则返回301,所以我知道它在某种程度上有效。 FQL是否会产生影响?

RewriteRule ^defunctexplorer.htm$ http://www.defunctgames.com/ [R=301,L]

更新2:

我尝试了FQL重定向,这也没有什么区别。这是我到目前为止所得到的:

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php
RewriteCond %{QUERY_STRING} (^|&)id=([a-z]+)-([0-9]+)(&|$) [NC]
RewriteRule ^ http://www.defunctgames.com/controllers/redirectseo.php?id=%2-%3 [R=301,L,NC]

1 个答案:

答案 0 :(得分:0)

%{THE_REQUEST}是否附加了查询字符串,未编码?可能值得这样做:

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php
RewriteCond %{QUERY_STRING} (^|&)id=review-[0-9]+(&|$) [NC]
RewriteRule ^ /controllers/redirectseo.php? [R=301,L,NC,QSA]