mod_rewrite如果子目录中的文件不存在

时间:2017-10-16 10:53:02

标签: apache .htaccess mod-rewrite

我以前从未使用过mod_rewrite,所以我在努力为我的用例设置适当的规则。

我的网址如下:domain.com/pict/123456 目录结构是这样的:

/pict/ |-- autogenerated/ |-- 12345.png |-- 87654.png |-- gen.php |-- .htaccess

我想要实现的目标是:

如果12345.png中不存在autogenerated, 将网址重写为gen.php?id=12345

其他提供autogenerated/12345.png文件

我尝试过在互联网上找到的各种解决方案(以及大多数Stackoverflow的答案 - 都无济于事。)

我的.htaccess文件如下:

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond autogenerated/%{REQUEST_FILENAME}.png -f
RewriteRule ^(.+)$  autogenerated/$1.png  [L]

RewriteRule ^(.*)$ generate.php?id=$1 [QSA,L]


</IfModule>

我也尝试过这样更改RewriteCond

RewriteCond autogenerated/$1.png -f

RewriteCond autogenerated/%{REQUEST_URI}.png -f

RewriteCond %{DOCUMENT_ROOT}/autogenerated/%{REQUEST_FILENAME}.png -f

RewriteCond %{DOCUMENT_ROOT}/autogenerated/$1.png -f

RewriteCond %{DOCUMENT_ROOT}/pict/autogenerated/%{REQUEST_FILENAME}.png -f

RewriteCond %{DOCUMENT_ROOT}/pict/autogenerated/$1.png -f

无论我做什么,首先RewriteRule永远不会触发,所有内容都会发送到gen.php

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

您可以在pict/.htaccess

中使用此类规则
RewriteEngine On
RewriteBase /pict/

# if image file exists inside pict/autogenerated/ 
RewriteCond %{DOCUMENT_ROOT}/pict/autogenerated/$1.png -f
RewriteRule ^(.+)$ autogenerated/$1.png [L]

# else rewrite to generate.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ generate.php?id=$1 [QSA,L]