2012-02-09 2 views
0

私の問題は、RewriteRuleが物理ディレクトリにアクセスしたときにまだ一致していることです。 http://a-domain.com/foo/ここで、fooはWebルートの通常のディレクトリです。実際のディレクトリをスキップするためのRewriteCondは無視されているようです。

.htaccessファイルがあります:

Options -Indexes 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule .? index.php [L] 

それは私のdevのサーバー上ではなく、ライブWHM/CPanelのサーバー上で正常に動作します。私は少し失われています。

+0

共有ホスティングでmod_rewriteを有効にしていますか? – ThinkingMonkey

+0

はい、共有されていません。 – Walf

答えて

0

私はcpanelのウェブサイトでこれをテストしました。あなたが正しいと私は問題がどこにあるのかを知りました。既定のファイル(インデックス)を持たないWebサイト内のフォルダにアクセスしようとすると、403 HTTPコードを担当するファイルにアクセスしようとします。存在しないため、URLはindex.phpに書き換えられます。

あなたがしなければならないのは、あなたの.htaccessファイルの上記にこれを追加している:私はVM which mirrors my own shared serviceでこれを試してみました、それは私のために正常に動作します

ErrorDocument 403 /index.php?type=err&code=403 
+0

'Options -Indexes'と' ErrorDocument 403/index.php'は '.htaccess'でクエリパラメータを変更するのを避けているので、これにより、PHPに許可されたリストなしでフォルダを渡しながら、目的のサブフォルダにアクセスすることができました。 – Walf

+0

あなたは最も近かったです。コードは401だった! (私の答えで説明した) – Walf

+0

私のサーバーは403のステータスコードを生成します。そのため私は403を私の答えに入れています。 – undone

0

fooディレクトリに別のファイル.htaccessがありますか?もしそうなら、書き換えエンジンはあなたのDOCROOTを無視し、代わりにこれを使用しますか?

+0

はい、それに 'mod_rewrite'ディレクティブはありません。 – Walf

+0

あなたの(2つの)システム/仮想ホストの設定には異なる 'DirectoryIndex'指令があると思います。 index.phpを含むディレクトリインデックスがある場合、ルールは機能しますが、/ foo /は/foo/index.phpにマップされるので、ルールが起動しているように見えます – TerryE

+0

仮想ホストまたはシステムの設定に触れていませんもし彼らが違うなら、どうしたらいい?優先順位が最も高いものだけが有効です。 DirectoryIndexディレクティブがあり、存在する/foo/index.phpと一致するはずですが、なぜ私のルールは一致しますか?それは実際のディレクトリ/ファイル/シンボリックリンク上で一致しないような条件を持っています。 – Walf

0

/foo/ディレクトリには基本認証があり、%{REQUEST_FILENAME}に存在しないファイル/home/the_user/public_html/401.shtmlが含まれていると失敗しました。基本的な認証が機能していたので、これは問題ではないと思っていました。認証プロンプトをキャンセルすると、標準の401ファイルが提供されていました。通常、これらのErrorDocumentファイルが見つからない場合、Apacheはと表示します。さらに、ErrorDocumentを使用して要求を処理しようとしているときに、タイプ404のエラーが発生しました。

関連する問題