2016-11-18 27 views
1

mod_rewriteルールが必要ですが、自分では理解できません。サーバ上にファイルが存在するかどうかをチェックするmod_rewriteルール

リクエストURLを指定できます

.htaccess
https://image.domain.com/sub.domain.com/400x400/image.jpg 

私は、次のファイルが存在するかどうかを確認したい:

/sub.domain.com/cache/400x400/image.jpg 

このファイルが存在する場合、それはファイルを提供すべきであるより。存在しない場合は、次のmod_rewriteルールに進みます。

これはmod_rewriteで可能ですか?はいの場合、どうですか?

答えて

1

それは、このコードに存在しない場合はsub.domain.com/.htaccessを作成します。

RewriteEngine On 

# ignore files and directories from all rewrite rules  
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule (^|/)index\.php$ - [L,NC] 

RewriteCond %{DOCUMENT_ROOT}/sub.domain.com/cache/$1 -f 
RewriteRule ^(?!cache/)(.+\.\w+)$ cache/$1 [L,NC] 

#Else go to controller 
RewriteRule ^(|(.*)/)([0-9]+x[0-9]+|[a-z]+[0-9]+|original)/(.*)$ ../index.php?path=$4&format=$3&folder=sub.domain.com [L,QSA] 

説明:

  • (?!cache/) - すでにcache/
  • (.+\.\w+)を持つ要求を無視するように、負の先読みを - 任意のリクエストと少なくとも1つの内線番号を一致させ、それを$1
  • 第一のルールは、要求条件がターゲットで、その後成功した場合
  • cache/ディレクトリに完全なパスを使用して$1ファイルの第二RewriteCondチェックの存在が
  • 私たちは接頭辞既存のファイルまたはディレクトリのためではないかどうかを確認する2 RewriteCondを持っています相対ファイルパスcache/
+0

これは動作するようです。 RewriteRuleについて説明できますか?私はそれもpng、gifなどで動作するように変更する必要があります。多分すべてのファイル拡張子。 – Timo002

+0

説明を追加し、拡張機能をサポートするためのルールも変更しました。 – anubhava

+0

ありがとうございます。今度は、この行を書き換えルールの次に追加します: 'RewriteRule ^(|(。*)\ /)([0-9] + x [0-9] + | [az] + [0-9] + |オリジナル)\ /(。*)$ ../index.php?path=$4&format=$3&folder=sub.domain.com [L、QSA] ' これでファイル存在する。 – Timo002

関連する問題