我目前正在尝试在PHP中构建路由脚本,我正在使用htaccess将URL数据发送到PHP页面。
我的问题是,我允许所有字符,现在意味着所有网址都可以包含未知数量的前导斜杠。
我的Htaccess是:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L]
</IfModule>
这意味着,这个网址:
http://www.domain.com/sometext
会给我相同的$ _GET ['url']:
http://www.domain.com////////sometext
对我的htaccess的要求是,我实际上可以在字符串中使用斜杠,但不在前面:)
有谁知道,我做错了什么? :)
在我的根文件夹中,我有这个htaccess:
DirectoryIndex index.html index.php
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
在my / public文件夹中,我有这个htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{THE_REQUEST} \ /+([^\?\ ]*)
RewriteRule ^ /%1 [R=301,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L]
</IfModule>
答案 0 :(得分:2)
对于这样的网址:
http://www.domain.com////////sometext
在RewriteRule
中通过正则表达式之前,URI会被规范化。这意味着URI变为:
sometext
这意味着url
参数(即$_GET['url']
)不应该在字符串的前面有大量的斜杠。如果这是在浏览器的URL位置栏中看到大量斜杠的问题,那么你可以这样做:
RewriteCond %{THE_REQUEST} \ /{2,}([^\?\ ]*)
RewriteRule ^ /%1 [L,R=301,QSA]
摆脱前面的斜线。