[英]301 Redirecting URLs based on GET variables in .htaccess
我有一些乱七八糟的旧网址,例如...
http://www.example.com/bunch.of/unneeded/crap?opendocument&part=1
http://www.example.com/bunch.of/unneeded/crap?opendocument&part=2
...我想重定向到更新、更清晰的表单...
http://www.example.com/page.php/welcome
http://www.example.com/page.php/prices
我知道我可以通过简单的重定向将一个页面重定向到另一个页面,即
重定向 301 /bunch.of/unneeded/crap http://www.example.com/page.php
但是源页面没有改变,只有 GET 变量。 我不知道如何根据这些 GET 变量的值进行重定向。 有人可以帮忙吗!? 我对旧的正则表达式相当方便,所以如果必须的话我可以使用 mod-rewrite 但我不清楚重写 GET vars 的语法,我更愿意避免性能下降并使用更清洁的重定向指令。 有办法吗? 如果没有,有人能告诉我正确的 mod-rewrite 语法吗?
干杯,
罗杰。
由于 URL 查询中的参数可能具有任意顺序,因此您需要对每个要检查的参数或每个可能的排列使用一个RewriteCond
指令。
这是每个参数的RewriteCond
指令的示例:
RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=1(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/welcome? [L,R=301]
RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=2(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/prices? [L,R=301]
但正如你所看到的,这可能会变得一团糟。
所以更好的方法可能是使用RewriteMap
。 最简单的是与键和值对的纯文本文件:
1 welcome
2 prices
要定义您的地图,请在您的服务器或虚拟主机配置中编写以下指令(该指令在每个目录上下文中是不允许的):
RewriteMap examplemap txt:/path/to/file/map.txt
那么你只需要一个规则:
RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=([0-9]+)(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/%{examplemap:%2}? [L,R=301]
RewriteCond %{QUERY_STRING} option=com_content&task=view&id=70&Itemid=82
RewriteRule ^index.php http://www.example.com/business/banks/? [R=301,L]
这 ? 将阻止用户发送到的 url 与原始页面具有相同的查询字符串。
总之,您可以将RedirectMatch
与将匹配完整 URL(包括查询字符串)的正则表达式一起使用。 这将让您重新排列 URL 的一部分,但是如果您必须将“opendocument&part=1”转换为“welcome”(新 URL 与原始 URL 完全不同),您可能需要一个RewriteMap
- 或者更好,只需将所有 URL 发送到page.php
并在 PHP 中解析查询字符串。
编辑:如果您只想重定向几个 URL,您可能会写出单独的规则,例如
RedirectPermanent http://www.example.com/bunch.of/unneeded/crap?opendocument&part=1 http://www.example.com/page.php/welcome
RedirectPermanent http://www.example.com/bunch.of/unneeded/crap?opendocument&part=2 http://www.example.com/page.php/prices
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.