【问题标题】:RewriteRule returns HTTP 200 when it should be HTTP 301RewriteRule 在应该是 HTTP 301 时返回 HTTP 200
【发布时间】:2012-02-08 01:45:35
【问题描述】:

以下 RewriteRule 将流量从 url shows.php?id=review-1 转发到服务器端控制器文件,该文件创建 SEO 友好 URL 并使用 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]

【问题讨论】:

  • 嗨。你找到解决办法了吗?我已经应用了 301 重定向,它似乎可以工作,但使用 curl 会显示“200 代码响应”。

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


【解决方案1】:

%{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]

【讨论】:

  • 我尝试按照您的建议删除\?,但似乎没有什么不同。
猜你喜欢
  • 1970-01-01
  • 2021-06-16
  • 2013-01-20
  • 2010-12-07
  • 2018-09-11
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多