【问题标题】:301 redirects in htaccess dont acknowledge query stringshtaccess 中的 301 重定向不确认查询字符串
【发布时间】:2014-06-03 18:32:57
【问题描述】:

我需要将一个旧的动态页面重定向到一个新的关键字 URL:

Redirect 301 http://www.domain.com/index.php?id=100 http://www.domain.com/newhello

但是,我不断收到 404 错误:

在此服务器上找不到请求的 URL /index.php。

就好像 apache 忽略了查询字符串,只查看 URL 的 'index.php' 部分。

我也玩过“RewriteRule”和“RedirectMatch 301”,但结果相同。任何意见,将不胜感激。

编辑 - 下面是整个 .htaccess 文件内容的粘贴。请注意,这是在根目录中:

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteCond %{REQUEST_URI} !newroot/
RewriteRule (.*) /newroot/$1 [L]

#successful 301 redirect or mod_rewrite directives will be listed from here.

【问题讨论】:

  • 你的mod_rewrite规则是什么?
  • 嗨,胜利,我还没有制定任何规则。我已经编辑了原始问题以显示我的 .htaccess 文件目前包含的内容。希望这可以帮助你帮助我!

标签: apache .htaccess mod-rewrite query-string


【解决方案1】:

您无法使用 Redirect 指令匹配 QUERY_STRING。在您的根 .htaccess 文件中使用 mod_rewrite 代替:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^id=100$
RewriteRule ^index\.php$ http://www.domain.com/newhello? [L,R=301]

RewriteCond %{HTTP_HOST} ^(www.)?domain\.com$
RewriteCond %{REQUEST_URI} !/newroot/
RewriteRule (.*) /newroot/$1 [L]

【讨论】:

  • 感谢 anubhava 的信息,但我仍然遇到同样的问题。就好像 apache 没有将此规则视为匹配,因此甚至没有查看它。有没有更好的方法告诉 apache 查看整个 URL?
  • 验证您的.htaccess 是否启用,通过在您的.htaccess 顶部放置相同的垃圾(随机)文本并查看它是否生成500(内部服务器)错误?跨度>
  • 是的,已验证。如果重定向是基本的(即静态网址),则重定向工作正常。只有带有?id=123 的网址会导致问题......
  • 您可以看到我是如何在newhello? 末尾添加? 的,用于剥离现有的查询字符串。
  • 太棒了!感谢您的解释和耐心。我从这次谈话中学到了很多东西!
猜你喜欢
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 2012-08-16
  • 2014-11-11
相关资源
最近更新 更多