2017-10-16 80 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