.htaccess中的查询字符串未返回双正斜杠

时间:2018-12-24 06:49:21

标签: php .htaccess

这是我的.htaccess文件

ErrorDocument 404 /core/pageNotFound.php

RewriteEngine on
RewriteCond %{SERVER_PORT} 80 
RewriteBase /
Options -Multiviews

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^share/?$ share.php [NC,L]
RewriteRule ^share/(.*?)/?$ share.php?url=$1 [NC,L]

但是问题是当我有这样的URL

https://www.example.com/share/https://testsite.com

当我尝试在我的PHP页面中将其回显

echo $url = $_GET['url'];

这就是我得到的

https:/testsite.com

代替

https://testsite.com

https:之后的正斜杠变为1,而不是2。有关如何解决此问题的想法?

1 个答案:

答案 0 :(得分:3)

显然,RewriteRule将多个斜杠合并为一个,这可能是由于RFC1630中对URI路径的定义所致

  

[...]当包含斜杠时,它们必须表示层次结构   结构。

一种解决方法是将其捕获到RewriteCond中:

RewriteCond %{REQUEST_URI} ^/share/(.*?)/?$ [NC]
RewriteRule ^ share.php?url=%1 [L]

使用NGINX代替Apache时,也会发生相同的“问题”。在NGINX中,您可以通过将斜杠合并到配置中来禁用斜杠的合并:

merge_slashes off;