使用htaccess在URL中引入斜杠

时间:2013-10-14 23:36:31

标签: regex .htaccess

我目前正在尝试在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>

1 个答案:

答案 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]

摆脱前面的斜线。