0

私のウェブルート(var / www)では、.htaccessファイルに次のものがあります。

RewriteCond %{REQUEST_URI} ^system.*
RewriteCond $1 !^(index\.php|vges|images|robots\.txt)


RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /test/index.php?/$1 [L]


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

次に、codeigniterプロジェクトを含むサブディレクトリ(/ var / www / test)があります。また、次の.htaccessファイルもあります。

RewriteEngine On
RewriteCond $1 !^(index\.php|quiz|vges|buddy|css|fonts|img|images|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

ローカルホストにアクセスすると、テストディレクトリを表示できます。テストディレクトリに移動すると、デフォルトのコントローラービューが表示されます。しかし、localhost / test / controllerにアクセスすると、404notfoundエラーが発生します。

The requested URL /index.php/events was not found on this server.

編集:最後の行/var/www/vges.htaccessを次のように変更して解決策を見つけました:

RewriteRule ^(.*)$ test/index.php/$1 [L]

このテストプロジェクトをサブディレクトリではないサーバーにアップロードする場合は、エラーが発生する可能性があります。これに対する最善の解決策は何ですか?.htaccessファイルで何を変更すればよいですか?

  1. ローカルマシンにサブディレクトリを置くことができます
  2. それらを個別のプロジェクト(テストプロジェクトなど)としてサーバーにアップロードする場合、.htaccessファイルを変更する必要はありません。

ありがとう。

4

1 に答える 1

1

まず、.htaccessファイルは、それらが存在するディレクトリとすべての子ディレクトリに適用されます。CodeIgniter固有のルールは、var/www/test/CIディレクトリ(通常はCIのindex.phpファイルがある場所)にある必要があります。

第二に、あなたのルート.htaccessはちょっと変です。RewriteCondルールが実行されるまで条件が蓄積されRewriteRule、その後リセットされます。URIを両方で開始することはできないため、 2つの%{REQUEST_URI}条件は互いに競合します。この.htaccessルールが何をしているのかはよくわかりませんが、ルートから始まるURLがCIアプリケーションと関係がない場合は、そもそもそこにある必要はないと思います。あなたのディレクトリ構造とあなたがあなたのウェブサイトをどのように機能させたいかを知らなければ、私は確かに言うことはできません。

kjetilhは正しいです-あなたの環境がまったく同じ設定を共有しない限り、.htaccessが普遍的に機能することはありそうにありません。最善の策は、それらをできるだけ単純に開始し、必要に応じて変更することです。CI 2.1.xの開始.htaccessは、次のようなものです。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(favicon\.ico|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

アセットディレクトリまたはリダイレクトしたくないパスを3番目に追加できますRewriteCond(ピリオドなどの正規表現文字を適切にエスケープすることを忘れないでください)。CIがサブRewriteBaseディレクトリにある場合、ルールは間違いなく役に立ちます。また、2.1.xではシステムおよびアプリケーションフォルダーの参照は必要ありません。これらのフォルダーには、それらへのアクセスをブロックする独自の.htaccessファイルがあるためです。

于 2013-02-27T05:06:28.960 に答える