2017-10-16 74 views
1

我从来没有使用mod_rewrite之前,所以我跟我的用例建立一个适当的规则挣扎。的mod_rewrite如果子目录中的文件不存在

我有一个网址寻找这样的:domain.com/pict/123456 目录结构像这样:

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

什么,我想实现的是:

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

else else autogenerated/12345.png文件

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

.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

而且无论我做什么,第一重写规则从未触发,一切都被发送到gen.php

我在这里缺少什么?

+1

两个REQUEST_FILENAME和REQUEST_URI包含路径信息。 //你的htaccess文件位于根目录或pict文件夹中? – CBroe

+0

哦。我认为REQUEST_FILENAME只包含最后经过什么是“/” 我'htaccess'文件是内部“PICT”文件夹 – Tomaski

回答

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] 
+1

你是个明星!非常感谢:) 还是不明白为什么它没有为我工作,并设置'RewriteBase'并使其工作,坚韧...... O_O – Tomaski