【问题标题】:301 Redirect using .htaccess does not work301 使用 .htaccess 重定向不起作用
【发布时间】:2013-07-02 11:00:45
【问题描述】:

这是我在 .htaccess 文件中的规则:

Redirect 301 /George-Nelson-Bench-CT3005-EDI6.htm?categoryId=-1 http://www.mydomain.com/proddetail.php?prod=George_Nelson_Bench

但这在我的网站上显示 404 错误。

.htaccess 文件中的一些其他代码是:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^.*/index.php 
RewriteRule ^(.*)index.php$ /$1 [R=301,L]

其他一些正常工作的 301 重定向:

Redirect 301 /Modern-Classics_c8.htm http://www.mydomain.com/categories.php?cat=10
Redirect 301 /Sofas_c34.htm http://www.mydomain.com/products.php?cat=25
Redirect 301 /Bedroom_c2.htm http://www.mydomain.com/categories.php?cat=7

那么,为什么第一个 301 重定向规则不起作用?
有什么建议吗?

【问题讨论】:

  • httpd.apache.org/docs/2.2/en/mod/mod_alias.html#redirect: Syntax: Redirect [status] URL-path URL ...这里的重要部分:URL path
  • @CBroe 是的。 URL-path 在规则中是正确的。没有?
  • 查询字符串不是 URL路径的一部分。
  • 谢谢@CBroe。查询字符串是问题所在。

标签: apache .htaccess


【解决方案1】:

由于您无论如何都在使用 mod_rewrite,因此最好将基于 mod_alias 的代码替换为更强大和更灵活的 mod_rewrite。

您的第一个重定向规则不起作用,因为您使用的是查询参数。用这个替换那个规则:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+George-Nelson-Bench-CT3005-EDI6\.htm\?categoryId=-1\s [NC]
RewriteRule ^ /proddetail.php?prod=George_Nelson_Bench? [R=301,L]

【讨论】:

  • 感谢您指出查询字符串在这里造成了问题。我删除了它,它现在工作正常。我没有为此使用 mod_rewrite。谢谢。
猜你喜欢
  • 2013-04-06
  • 2017-06-30
  • 2014-07-05
  • 2014-12-21
  • 2011-03-08
  • 2013-03-14
  • 2023-03-27
相关资源
最近更新 更多