2012-04-20 16 views
4

私は、すべてのトラフィックをROOT/public/index.phpにリダイレクトしてからgetリクエストにURLを入れるPHPフレームワークを構築しています。私の問題は、私のRewriteCondが動作しておらず、ファイルとフォルダ名を受け入れていることです。Mod_rewrite - 書き換え条件が正しく動作していない

パブリックディレクトリ内

ルートディレクトリに

<IfModule mod_rewrite.c> 

RewriteEngine on 
RewriteRule ^$ public/ [L] 
RewriteRule (.*) public/$1 [L] 

</IfModule> 

<files .htaccess> 

order allow,deny 
deny from all 

</files> 

<IfModule mod_rewrite.c> 

    RewriteEngine On 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 

</IfModule> 
+0

簡単な質問uは、HTTP上でそれを実行している:// localhost /をしたり、ローカルホスト – kyle1046

+0

上でそれを実行しているif文を削除、廃棄物リソースと必要ではありません。 –

+0

上で実行されていないDS – JREAM

答えて

1

フラグ[L]フラグは、ルールが一致した後にリダイレクトを停止するようApacheに指示します。したがって、ROOTフォルダーが最初に来ると仮定すると、それは実行され、リダイレクションで停止し、2番目のリダイレクトは役に立たなくなります。この問題を解決するには

はこのている:

RewriteEngine on 
RewriteRule ^$ public/ 
RewriteRule (.*) public/$1 
+0

ありがとうございました!魅力のように働いた。 –

0

あなたのスクリプトにも、既存のファイルやディレクトリをリダイレクトしたい場合:

公開ディレクトリにある

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 

私の2セントのチップ:?url$1の部分を削除し、代わりに$_SERVER['REQUEST_URI']の内容を確認してください。

+0

これらの行を取り除くと、 '$ _GET ['url']'は常にindex.phpになります。これは私が望むものではありません。私はあなたが '$ _SERVER ['REQUEST_URI']'を提案している理由を推測しています。あなたの答えをありがとうが、私が探しているものではありません。 –