【问题标题】:mod_rewrite and 301 redirect in the same htaccessmod_rewrite 和 301 在同一个 htaccess 中重定向
【发布时间】:2012-11-16 22:38:46
【问题描述】:

我有以下 .htaccess 文件:

RewriteEngine on
Options +FollowSymLinks

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule (.*)$ ./page.php?name=$1

我还有大约 20 个不同的静态地址,我想进行 301 重定向。

它应该看起来像:

Redirect 301 http://www.example.com/category.php?id=3 http://www.example.com/books
Redirect 301 http://www.example.com/articles.php?id=124 http://www.example.com/birds

我尝试了所有方法,但都失败了。

有人可以帮帮我吗?

【问题讨论】:

  • 应该发生什么?怎么了?什么没有发生?
  • phpinfo() 中快速搜索mod_rewrite 会告诉您是否已加载mod_rewrite 模块。如果您没有看到它,那么您需要请您的服务器公司添加它。
  • 我收到 500 错误。我的服务器上有 mod_rewrite,因为它正在工作。问题在于添加 301 重定向。

标签: php .htaccess mod-rewrite


【解决方案1】:

我猜您在 redirect 示例中使用了一组 SEO 友好的 URL,如果是这种情况,那么您不希望浏览器重定向,而不是您想要一个内部重定向或别名,例如

RewriteRule ^/?books /category.php?id=3    [L]
RewriteRule ^/?birds /articles.php?id=124  [L]

如果您有许多规则并且可以访问 httpd.conf,您可能需要考虑重写映射文件和规则。

根据您在下面的评论,如果您想强制用户/爬虫使用新的 URL 结构,那么您需要在文件中添加一组额外的重写规则(而不是重定向),例如

RewriteCond %{THE_REQUEST}      /category\.php     [NC]
RewriteCond %{QUERY_STRING}     ^id=3  [NC]
RewriteRule ^.*                 http://%{HTTP_HOST}/books?   [R=301,L]

仅供参考: Apache mod_rewrite 文档值得一读,如果您不清楚上述规则的作用,或者如果您想要更抽象的内容,请考虑以下 post

【讨论】:

  • 恰恰相反。 May htaccess 文件现在正在处理 SEO 友好的 URL。问题是当我想将旧地址转换为新的友好 URL 地址时。由于某种原因,我的 htaccess 文件不会在同一个文件中添加 2 个 RewriteRule 语句。
  • 如果你在你的问题中说这会有所帮助,更新上面的答案,以反映。
  • 这很好用。只有一个问题:由于某种原因,您所做的重定向会将我指向example.com/books?id=3。是否可以去掉结果中的查询字符串?
  • 是的,选项中的 QSD 或 ?在目标中会这样做,会调整答案
  • 选项中的 QSD 创建了 50 错误但是 ?完美地工作。再次感谢。
猜你喜欢
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
相关资源
最近更新 更多