这是我的.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。有关如何解决此问题的想法?
答案 0 :(得分:3)
显然,RewriteRule
将多个斜杠合并为一个,这可能是由于RFC1630中对URI路径的定义所致
[...]当包含斜杠时,它们必须表示层次结构 结构。
一种解决方法是将其捕获到RewriteCond
中:
RewriteCond %{REQUEST_URI} ^/share/(.*?)/?$ [NC]
RewriteRule ^ share.php?url=%1 [L]
使用NGINX代替Apache时,也会发生相同的“问题”。在NGINX中,您可以通过将斜杠合并到配置中来禁用斜杠的合并:
merge_slashes off;