我以前从未使用过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
答案 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]