【发布时间】:2014-08-05 20:06:38
【问题描述】:
我该如何改变 http://www.domain.ca/directory/file.php?oldkey=2087 到 http://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