繁体   English   中英

.htaccess使用参数$ 1和$ 2重定向以形成URL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM