首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用路径中的完整url重写htaccess模板

用路径中的完整url重写htaccess模板
EN

Stack Overflow用户
提问于 2018-09-19 10:11:18
回答 2查看 93关注 0票数 0

如何在url重写路径包含url的情况下设置htaccess模板重写?

类似于:

代码语言:javascript
运行
复制
https://mysite.test/results/http://mycrawled.site/page/

我在网站评分器上看到过这种行为。

这是我目前的重定向规则:

代码语言:javascript
运行
复制
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^results/(.*)$ /tpl/results.php?url=$1 [L,QSA]

使用当前规则,url查询参数中的任何双斜杠都将转换为单个斜杠。

例如:从http://mycrawled.sitehttp:/mycrawled.site

如何纠正此重写,使url参数不被修改?

更新

因此,经过一些测试,我发现了问题的原因。有一个移除尾斜杠规则,它从url中剥离第二个斜杠。

代码语言:javascript
运行
复制
# Remove Trailing Slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [r=301,l]

我怎么才能解决这场冲突?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2018-09-19 10:20:02

对该值进行编码并将其传递给URL。通过这样做,您不需要担心值和斜杠。在最后解码这个值,您将得到确切的结果。

代码语言:javascript
运行
复制
$fullURL = 'http://your-website.com/results.php?url=' + urlencode('http://example.com'); 

然后再解码

代码语言:javascript
运行
复制
$result = urldecode($_GET['url']);
票数 0
EN

Stack Overflow用户

发布于 2018-09-19 11:20:36

另一种可能是将http:(或https:)部分验证为匹配,然后是域,最后是远程路径。在那之后,再连接一次。

优点:您可以显式地检查域名称是否使用https,也可以单独使用域名称。在下面的例子中(未经测试!)你可以把冒号移到第一个匹配。在这种情况下,您也可以使用非urls规则(尽管我建议不要这样做)。

代码语言:javascript
运行
复制
RewriteRule ^results/(https?)://(.*?)/(.*)$ /tpl/results.php?url=$1://$2/$3 [L,QSA]

所以,当使用您的示例http://mycrawled.site/page

  • $1 = http或https (此处: http)
  • $2 =域名(此处: mycrawled.site)
  • $3 = path (此处:页面)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52403433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档