【问题标题】:Redirect Rewrite rule Working重定向重写规则工作
【发布时间】:2017-10-15 15:17:36
【问题描述】:

重写

example.com/about-us?pageID=1 to example.com/about-us

尝试了以下规则和其他规则,但似乎没有任何效果

Redirect 301 /about-us?pageID=1  http://example.com/about-us

这个有效,但也会干扰其他链接

RewriteCond %{QUERY_STRING} pageID=1
RewriteRule (.*) http://example.com/about-us? [R=301,L]

还有其他带有about-us/pageidproduct/pageID 的页面,无需打扰,我只需要重定向此特定链接。

【问题讨论】:

  • 你想重定向还是重写?
  • 重定向链接

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


【解决方案1】:

要重定向该特定 URL(基本上只是删除查询字符串),您应该包含一个 RewriteRule pattern 以匹配 URL 路径(就像您对 Redirect 指令所做的那样)。

RewriteCond %{QUERY_STRING} ^pageID=1$
RewriteRule ^(about-us)$ /$1? [R=301,L]

如您所见,您需要使用 mod_rewrite(即RewriteCond)来匹配查询字符串。

$1 只是对RewriteRule 模式 中匹配组的反向引用,即。 “关于我们”。这只是避免了重复“关于我们”。

在测试之前清除浏览器缓存,因为之前的 301 将被缓存。因此,使用临时 (302) 重定向进行测试通常更容易。

【讨论】:

  • 总是清除缓存但没有规则不起作用 RewriteCond %{QUERY_STRING} ^pageID=([1]*)$ RewriteRule ^(.*)$ /about-us? [L,R=301]
  • 您是否尝试过我回答中的指令?您刚刚引用的规则不太可能起作用,因为它们将使用查询字符串参数重定向 每个 URL
  • 如果链接包含.php 扩展名(即/about-us.php?...),上述指令不会执行任何操作 - 或者您的意思是如果您将指令更改为匹配?只是您说您问题中的指令“有效但会干扰其他链接”。如果您问题中的指令“有效”,那么这也应该“有效”。确保您的浏览器缓存是清晰的(301 被浏览器硬缓存)。你的.htaccess 文件中有其他指令吗?
  • .htaccess RewriteCond %{QUERY_STRING} pageID=1 RewriteRule (.*) example.com/about-us中有很多重写规则? [R=301,L] 将所有其他链接也重写为 product?pageId=1 到 /about-us
  • 如果我的回答中的指令/规则不是“做任何事情”,那么可能与您现有的指令发生冲突。订单很重要。请将您的 .htaccess 文件(带有这些指令)添加到您的问题中。
【解决方案2】:

您应该能够在您的.htaccess 中使用此规则来实现example.com/about-us

RewriteEngine On
RewriteRule ^about-us$ /about-us?pageID=1 [L]

请确保在测试之前清除缓存。

【讨论】:

  • 不,这不起作用我需要将 /about-us?pageID=1 重定向到 /about-us
  • 也许改写你的问题。考虑到它说 Rewrite 后跟两个 URL。
猜你喜欢
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多