[英]The .htaccess redirect with parameters $1 and $2 to form URL
我正在尝试在我的.htaccess中完成以下规则。 我在domain1.com的根目录中有此.htaccess,并希望安排以下重定向domain1.com/index.php?domain2.com?page.html,它将所有访问者都带到domain2.com/page.html。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^
RewriteRule (.+)\.php\?(.+)\?(.+) http://$2/$3 [R=301,L]
解决了。 domain1.com/domain2.com/page.html
RewriteEngine On
RewriteCond %{HTTP_HOST} ^
RewriteRule (.+)\/(.+) http://$1/$2 [R=301,L]
无需构建像domain1.com/index.php?domain2.com?page.html
类的初始URL,这需要您捕获两个单独的反向引用(第二个?
将进行URL编码)。 最好按常规格式设置URL格式,如以下所示:
domain1.com.com/index.php?redirect=domain2.com/page.html
(不知道为什么要用?
代替传递的URL中的第一个斜杠?)
然后,您可以执行以下操作。 请注意,您需要使用一种条件来检查QUERY_STRING
服务器变量。
RewriteCond %{QUERY_STRING} ^redirect=([^&]+)
RewriteRule ^index\.php$ http://%1 [QSD,R,L]
%1
是对最后匹配的CondPattern的反向引用。
需要QSD
标志才能从请求中丢弃原始查询字符串。
但是,您需要在可以重定向到的域上执行其他验证,否则一旦发现恶意意图,它可能会被滥用。
更新:
RewriteCond %{HTTP_HOST} ^ RewriteRule (.+)\\/(.+) http://$1/$2 [R=301,L]
RewriteCond
指令在这里什么也没做。 如果要验证是否存在Host
标头(即不是HTTP / 1.0请求),则应将regex ^
更改为.
(仅是一个点)。 但是,如果您在共享服务器上,则此测试可能是多余的。
通过使用UR1路径,如果目标主机名与源主机名相同,它将“中断”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.