0

.htaccess ファイルに次のものがあります。

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteCond %{REQUEST_FILENAME} !admin\.php$
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteRule ^.*$ - [G]

RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

ファイルが有効なファイルである場合、何も起こらないはずです(ファイルは正常に処理されるはずです)-これは機能します。

次に、ファイルの拡張子が .php で、admin.php でない場合、410 Gone ステータスが返されます。これは機能しません。常に次のディレクティブに進み、2 番目のブロックは無視されます。

URL の例: http://<my site>/file.php- 410 を返さず、最後のディレクティブに移動します。

なぜこうなった?

(また、stackoverflowがこの質問のサイトだとは思いませんが、何が何であるかはわかりませんでした:/)

編集:おそらく、これは Windows ローカルホストでは正常に機能しますが、ライブ Linux サーバーでは機能しないことを指摘する必要があります。

EDIT2:ドットがエスケープされたライブボックスではまだ機能しません。2 番目のブロックを最初のブロックの上に移動すると、すべてがなくなります。

4

2 に答える 2

0

http://<my site>/file.phpGONE以前にこのルールがあるため、メッセージを表示していません:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

つまり、実際のファイル、リンク、またはディレクトリの .htaccess ルールを無視します。ファイルに GONE メッセージを表示する場合は、次のようにファイルの.phpスキップ ルールを除外し.phpます。

RewriteCond %{REQUEST_FILENAME} !\.php$ [NC]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
于 2013-07-18T07:49:00.477 に答える