6

以下は私のディレクトリ構造です。

admin\
controls\
images\
media\
lib\
models\
views\
index.php
.htaccess

以下は私の.htaccessです

RewriteEngine On 
RewriteRule /admin/images/(.*) /images/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php

/ admin/imagesのすべてがルートディレクトリの/imagesと等しくなるようにします。例:http ://www.example.com/admin/images/example.pngはhttp://www.example.com/images/example.pngと同じになります

私の.htaccessの問題は次のとおりです: admin/imagesをimages/にミラーリングする代わりにindex.phpに行きます


解決

RewriteEngine On 
RewriteRule /admin/images/(.*) /images/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
4

2 に答える 2

10

それ以上の書き換えを防ぐために、画像の書き換えルールが行の最後のルールであることを指定する必要があります。そのために[L]は、イメージの書き換えルールの最後に指定するだけです。

RewriteEngine On 
RewriteRule /admin/images/(.*) /images/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php

編集:これが問題が発生する理由の説明です(説明を提供するためにコメントセクションから取得)。

%{REQUEST_FILENAME}何段階の書き換えを行っても、オリジナルは変わらないことがわかります。つまり、2番目のルールに達した場合、その変数は実際には、/admin/images/書き換えられて存在しない()ではなく、既存のイメージ(にある)を指し/images/ます。これが、2番目のルールが常に適用される理由であり、例の2つの条件付き行が、ほとんどの場合、書き換え中に使用される最初の行である理由です。

于 2012-06-30T12:31:02.993 に答える
4

次のようにルールを変更します。

RewriteEngine On 
RewriteRule ^admin/images/(.*) images/$1

そして、.htaccessをドキュメントルートに配置します。ただし、「/admin」親フォルダに配置します。

于 2012-06-30T11:18:20.483 に答える