Htaccess - 在重写网址后检查文件是否存在

时间:2016-01-27 10:12:40

标签: apache .htaccess file url-rewriting

我创建了这条规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)/account/(.*)$ accounts/$1/$2 [NC,L]

指向这样的地址: example.com/john/account/img/1.jpg example.com/accounts/john/img/1.jpg 它有效。

如果不存在phisical文件的url,我知道如何制定规则。

但是现在我希望在此规则之后为默认图像(或其他文件类型)设置文件夹。参考该示例,我想显示图像 example.com/default/img/1.jpg (或直接 example.com/img/1.jpg )图片不存在于“john”文件夹中( example.com/accounts/john/img/1.jpg )。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

请尝试以下规则:

# image doesn't exist in /accounts/john/<img>
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/accounts/$1/$2 !-f
RewriteRule ^([\w-]+)/account/(.+)$ default/$2 [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/accounts/$1/$2 -f
RewriteRule ^([\w-]+)/account/(.+)$ accounts/$1/$2 [NC,L]

答案 1 :(得分:0)

感谢anubhava。

与此同时,我正在尝试使用此代码并且似乎有效。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)/account/(.*)$ accounts/$1/$2 [NC,L]

# If file is not found into accounts folder (limited to "images")
# it is searched in root folder (/images)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^accounts/([a-zA-Z0-9_-]+)/images/(.*)$ images/$2 [NC,L]