如何在url重写路径包含url的情况下设置htaccess模板重写?
类似于:
https://mysite.test/results/http://mycrawled.site/page/
我在网站评分器上看到过这种行为。
这是我目前的重定向规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^results/(.*)$ /tpl/results.php?url=$1 [L,QSA]
使用当前规则,url查询参数中的任何双斜杠都将转换为单个斜杠。
例如:从http://mycrawled.site
到http:/mycrawled.site
。
如何纠正此重写,使url参数不被修改?
更新
因此,经过一些测试,我发现了问题的原因。有一个移除尾斜杠规则,它从url中剥离第二个斜杠。
# Remove Trailing Slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [r=301,l]
我怎么才能解决这场冲突?
谢谢
发布于 2018-09-19 10:20:02
对该值进行编码并将其传递给URL。通过这样做,您不需要担心值和斜杠。在最后解码这个值,您将得到确切的结果。
$fullURL = 'http://your-website.com/results.php?url=' + urlencode('http://example.com');
然后再解码
$result = urldecode($_GET['url']);
发布于 2018-09-19 11:20:36
另一种可能是将http:(或https:)部分验证为匹配,然后是域,最后是远程路径。在那之后,再连接一次。
优点:您可以显式地检查域名称是否使用https,也可以单独使用域名称。在下面的例子中(未经测试!)你可以把冒号移到第一个匹配。在这种情况下,您也可以使用非urls规则(尽管我建议不要这样做)。
RewriteRule ^results/(https?)://(.*?)/(.*)$ /tpl/results.php?url=$1://$2/$3 [L,QSA]
所以,当使用您的示例http://mycrawled.site/page
时
https://stackoverflow.com/questions/52403433
复制相似问题