0

mod_rewrite がディレクトリ「パブリック」を完全に無視するようにするには、どのルールを設定すればよいですか? つまり、その中のファイルにアクセスできる必要がありますが、ファイルが存在しない場合は、サーバー エラー ページに FORBIDDEN や FILE NOT FOUND などのメッセージが表示されるはずです。カスタム エラー ページなどは必要ありません。mod_rewriteがまったくないように「パブリック」が動作するようにしたいだけです。

ここに私の .htaccess ファイルがあります:

RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

私のファイル構造は

/system/
/application/
/public/

書き換えルールがまったく設定されていないように、フォルダー public を動作させ、完全に無視します。

編集

それは私の.htaccessファイルです:

RewriteEngine on

RewriteRule ^(public)($|/) - [L,NC]

RewriteCond $1 !^(index\.php|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

私はすでに /public/ フォルダーにこの .htaccess を持っていました:

RewriteEngine off

上記のさまざまな回答をすべて試しました(およびGoogleからのトン)。私はこれまでに何を混ぜようとしました。

マイ フォルダ:

/system/
/application/
/public/ 
/public/.htaccess #RewriteEngine off
/public/favicon.ico
/index.php

以下は、私が得ている結果のURLです。

/public/favicon.ico -> I get the favicon
/public/faviDon.ico -> I get the index.php (without mod rewrite you would get "not found")
/public/ -> I get the index.php (without mod rewrite "forbidden")

そのため、ファイルが見つからなかった場合、またはフォルダーに直接アクセスした場合でも、URL を書き換えます。

見えますか?

努力してくれてありがとう!ほんとうにありがとう!

4

1 に答える 1

3

編集

私のマシンであなたのファイルを完全にセットアップします

//  /.htaccess

RewriteEngine on

RewriteRule ^(public)($|/) - [L,NC]

RewriteCond $1 !^(index\.php|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

パブリック フォルダーの .htaccess:

//  /public/.htaccess

Options -Indexes
RewriteEngine off

これにより、必要に応じて書き換えが無効になります。

/public/                 -> 403 Forbidden
/public/favicon.ico      -> 200 File found
/public/not-existing.ext -> 404 File not found

public フォルダーに index.php がありますか? 多分あなたはそれを削除することができます..

どのような種類のマシンでテストしていますか?

Linux + Apache 2 + PHP5.3 でテストしました

午後にもっとサポートできます (私の時間 +2 GMT)

編集2

/.htaccess からこの行を削除しても機能します

RewriteRule ^(public)($|/) - [L,NC]

すべては public フォルダーの .htaccess によって処理されます。

ブラウザのキャッシュの問題かもしれません。別のブラウザーを試す/履歴をクリーンアップする/アプリをインストールしてキャッシュを削除する.. (使用しているブラウザーによって異なります)

于 2013-01-23T21:09:47.727 に答える