【问题标题】:mod rewrite old url to new url, change parameter name but keep valuemod将旧url重写为新url,更改参数名称但保留值
【发布时间】:2014-08-05 20:06:38
【问题描述】:

我该如何改变 http://www.domain.ca/directory/file.php?oldkey=2087http://www.domain.ca/directory/?id=2087

我想更新 URL 以删除旧文件名并更改参数键但保持值相同。

我尝试了很多组合,但到目前为止,我尝试过的任何组合都没有给我这个结果。我所有的搜索都产生了针对不同问题的解决方案,并将查询更改为目录,或更改参数值,但不更改参数键。

最近的尝试:

#Redirect 302 (.*)file\.php\?oldkey$ http://www.domain.ca/directory/?id$1

Options +FollowSymlinks

RewriteEngine on

RewriteCond %{HTTP_HOST} ^domain\.ca/directory/file\.php?oldkey=$ [NC]
RewriteRule ^(.*)$ http://www.domain.ca/directory/id=$1 [R=302,L]

RewriteCond %{QUERY_STRING} (^|&)deal=(&|$)
RewriteRule ^oldkey=$ /$0?id= [R=302,L]

我现在使用 302,直到我可以使用它,然后将更改为 301 以保持永久性。

提前致谢!

更新:

我尝试了几个看起来很有希望但仍然无济于事的版本。希望我走在正确的轨道上吗?

RewriteCond %{QUERY_STRING} ^oldkey=(.*)$ [NC]
RewriteRule ^/directory/$ /directory/directory2/?id=%1 [NC,L] #R=302 - for now

但什么也没发生。这就像规则被忽略了。如果密钥存在,它不会触发吗? 我什至还在上面加上:

RewriteCond %{QUERY_STRING} oldkey

检查键是否存在于查询字符串中。

【问题讨论】:

  • 1.这不是主机名。 2. RewriteRule 只查看 URL 的路径部分,而不是查询字符串。
  • 1.是的,我知道。我尝试进一步修改它,看看是否能得到不同的结果。 2. 如果前面有 RewriteCond %{QUERY_STRING} 怎么办?
  • 为什么投反对票?没有人问过这样的问题。我是 Mod Rewrite 的新手,但我正在努力弄清楚,希望其他人也能在这里使用答案。

标签: .htaccess mod-rewrite


【解决方案1】:

试试:

RewriteCond %{QUERY_STRING} ^oldkey=([0-9]+)
RewriteRule ^directory/file\.php$ /directory/?id=%1 [L,R=302]

【讨论】:

  • 当我尝试它时,这似乎被忽略了 - 当然用我的真实站点数据替换变量。
  • @acarito 是仅限于数字的“旧键”(如您的示例中)还是可以是任何东西?如果它可以是任何东西,您需要将[0-9]+ 更改为[^&]+
  • 谢谢@Jon Lin,很高兴知道。不过,它仅限于数字。
  • 原来这正是我所需要的。我当前的脚本在 Wordpress 部分的末尾有一个 L,它阻止了任何进一步的 RewriteRules 触发。现在最后一条规则有 L 并且一切正常。谢谢!
  • @acarito 哦,如果您有 wordpress 路由规则,您可能希望将这些规则放在 htaccess 文件的最后。重定向必须在任何路由之前发生,否则,路由会发生,并且会跳过任何重定向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
相关资源
最近更新 更多