1

ファイルに何を入れるか教えてください.htaccess

サーバーにPNG、GIF、JPG画像がありますhttp://domain.tld/images/anyimage.anyextension

のように URL をより親しみやすくしたいhttp://domain.tld/anyimage.anyextension


これは私が今持っています。最初の 2 つの文字列は、前述のようにリンクを変更します。しかし、最後の文字列はサーバーに対して元に戻りません。

RewriteCond %{REQUEST_URI} ^/images/(.+)(\.gif|\.jpg|\.png)$ [NC]
RewriteRule ^image/(.+)$ /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.+)$ /images/$1 [L]

追加すると

RewriteCond %{REQUEST_URI} ^/([^/.]+\.(png|gif|jpg))$ [NC]
RewriteCond %{DOCUMENT_ROOT}/image/%1 -f
RewriteRule ^([^/.]+\.(png|gif|jpg))$ /image/$1 [L,NC]

前のクエリ文字列ルールの直後に、画像が開かない。それ以前なら問題ありません。それは何でしょうか?それを修正する方法はありますか?最後の文字列RewriteRule ^/?(.+)$ /?$1 [L]がこの競合を引き起こします

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?([^\ ]+) [NC]
RewriteRule ^$ /%1? [R=301,L]
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+)$ /?$1 [L]
4

1 に答える 1

1

短くなることを除けば、それがどのように親しみやすいものになるのかはわかりません。これをドキュメント ルートの htaccess ファイルに追加してみてください。

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/([^/.]+\.(png|gif|jpg))$ [NC]
RewriteCond %{DOCUMENT_ROOT}/images/%1 -f
RewriteRule ^([^/.]+\.(png|gif|jpg))$ /images/$1 [L,NC]

http://domain.tld/images/anyimage.anyextension次に、すべてのリンクを からに変更できますhttp://domain.tld/anyimage.anyextension

anyimage.anyextension最初の条件では、拡張子が大文字と小文字を区別しない png、gif、または jpg である限り、リクエストが 用であることを確認します。

2 番目の条件では、要求されたイメージがディレクトリに実際に存在することを確認し/images/ます。


RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /images/(.+)(\.gif|\.jpg|\.png) [NC]
RewriteRule ^image/(.+)$ /$1 [R=301,L]

これにより、ブラウザが非 /image/ URL にリダイレクトされます。ここでは、2 つのまったく異なることが起こっています。1 つはブラウザを処理し、もう 1 つはサーバー上のコンテンツを処理します。それらがどのように異なるかを説明するこの回答の上部を参照してください。

あなたが持っているルールは機能しません。初め:

RewriteRule ^/(.+)$ /images/$1 [L]

一致することはありません。htaccess ファイルの RewriteRule の正規表現と照合するために使用される URI では、先頭のスラッシュが削除されているため、. で始まる URI はありません/。あなたはそれを取り除く必要があります。

第 2 に、一度実行すると、ルールが内部無限ループを引き起こすため、500 内部サーバー エラーが発生します。内部で書き換えられたものではなく%{THE_REQUEST}、パスを含む URL をブラウザーが実際に要求していることを確認するために、照合する必要があります。/images/

于 2012-08-15T04:06:43.650 に答える