2016-08-08 6 views
1

Apache2とPHPでURL書き換えをしようとしていますが、問題はrewrite_modを使用する.htaccessファイルを作成し、ここにある:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ webroot/index.php [QSA,L] 

^(.*)$パターンは、すべてのものと一致する必要がありますが、それは空の要求と一致していない、と私はその理由を知りません。

例として、/rootフォルダは.htaccessファイルです。

  • リクエスト/root/anythingが一致します。
  • /root/some/thingも一致します。
  • 要求/root/は一致していません。

ここで、/root/要求はパターン^(.*)$と一致する必要があります。「0回から任意の時間に任意の文字を一致させる」という意味です。

空のリクエストと一致しない理由を知っている人はいますか?

私は現在Linux Mintの下でLAMPを実行しています。 mod_rewrite

RewriteEngine On 

# handles landing page 
RewriteRule ^/?$ webroot/index.php [L] 

# handles rest 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . webroot/index.php [L] 

mod_dirモジュールで実行されている場合と、すなわち/index.phpは、このように原因RewriteCond %{REQUEST_FILENAME} !-f条件に、ルールの実行を阻止するランディングページにDirectoryIndexハンドラを追加します。

+0

あなたの置き換え中のフォルダ 'webroot'は正確に何に対応していますか? –

+0

htaccessに他のルールはありますか? – starkeen

+1

'webroot'は' index.php'とウェブサイトの内容(画像、スクリプトなど)を含むフォルダです。 '.htaccess'は** webroot'フォルダの上の**レベルです。したがって、 '.htaccess'ファイルへのパスは'/root/.htaccess'で、 'index.php'へのパスは'/root/webroot/index.php'です。 '.htaccess'ファイルには他のルールはありません。 – TheKitsuneWithATie

答えて

2

は、このようなあなたのルールを持っています。

+0

それは、すぐに答えるために働いてくれてありがとう。この問題を回避し、永続的な修正をするために、 'mod_dir' **が**' mod_rewrite'の後に実行されるようにする方法はありますか? – TheKitsuneWithATie

+1

さまざまなモジュールをロードするようなApacheの内部操作は、ユーザーの制御下にあります。上記のようなルールが多くの商用ソフトウェアと共に出荷されているのを見てきたので、これを永続的な修正と考えてください。 – anubhava

+1

注目、ありがとう! – TheKitsuneWithATie

関連する問題