Tom*_*man 3 .htaccess mod-rewrite
在我正在研究的网站上,我需要设置一个需要考虑查询字符串的重定向.
例:
http://www.domain.com/?id=86&name=John&ref=12d34 -> http://www.domain.com/?ref=12d34
http://www.domain.com/?ref=593x56&id=935 -> http://www.domain.com/?ref=593x56
http://www.domain.com/?ref=3v77l32 -> http://www.domain.com/?ref=3v77l32
Run Code Online (Sandbox Code Playgroud)
所以基本上我需要找到ref参数及其值(无论它的长度),并仅将该部分附加到新URL.问题是ref参数可以出现在URL中的任何位置.
任何帮助或指导将非常感谢!
RewriteRule不能直接使用查询字符串 - 您必须使用RewriteCond它.
这是规则 - 它将重定向(301永久重定向)任何在查询字符串中具有多个参数的URL,其中1个是 ref
RewriteEngine On
RewriteCond %{QUERY_STRING} (^|&)ref=([^&]*)(&|$)
RewriteCond %{QUERY_STRING} !^ref=([^&]*)$
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}?ref=%2 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
例如:
它将重定向http://www.example.com/hello.php?id=86&name=John&ref=12d34888&me=yes到相同的URL,但ref仅使用参数:http://www.example.com/hello.php?ref=12d34888.
如果仅ref存在参数或根本没有参数,它将无效,例如http://www.example.com/hello.php?ref=12d34888或http://www.example.com/hello.php.
如果此类重定向仅适用于网站根目录,则将RewriteRule行更改为:
RewriteRule ^$ http://%{HTTP_HOST}/?ref=%2 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
(如果放在网站根文件夹中的.htaccess文件中 - 如果放在服务器配置/虚拟主机上下文中,则需要稍微调整规则).
http://www.example.com/?id=86&name=John&ref=12d34888&me=yes - > http://www.example.com/?ref=12d34888
如果必须将其重定向到另一个域,则按%{HTTP_HOST}域特定名称替换,例如:
RewriteRule ^$ http://www.exampe.com/?ref=%2 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
这一切都在发布前经过测试.
| 归档时间: |
|
| 查看次数: |
3970 次 |
| 最近记录: |