1

我目前正在尝试在 PHP 中构建一个路由脚本,我使用 htaccess 将 URL 数据发送到 PHP 页面。

我的问题是,我允许所有字符,这意味着,所有 URL 都可以有未知数量的前导斜杠。

我的 Htaccess 是:

<IfModule mod_rewrite.c>

RewriteEngine On

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

RewriteRule ^(.*)$ index.php?url=$1 [L]
</IfModule>

这意味着,此 URL:

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>

在我的 /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>
4

1 回答 1

2

对于这样的 URL:

http://www.domain.com////////sometext

URI 在通过RewriteRule. 这意味着 URI 变成:

sometext

这意味着url参数 (ie $_GET['url']) 不应在字符串的前面有大量的斜杠。如果这是在浏览器的 URL 位置栏中看到大量斜杠的问题,那么您可以执行以下操作:

RewriteCond %{THE_REQUEST} \ /{2,}([^\?\ ]*)
RewriteRule ^ /%1 [L,R=301,QSA]

摆脱前面的斜线。

于 2013-10-14T23:41:03.740 回答