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パラメーター (つまり$_GET['url']) の文字列の先頭に大量のスラッシュを含めないでください。これがブラウザの URL ロケーション バーに大量のスラッシュが表示される問題である場合は、次のようにすることができます。

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

前のスラッシュを取り除くために。

于 2013-10-14T23:41:03.740 に答える