2016-03-10 94 views
0

所以...我有幾百萬個具有獨特名稱的PNG,這些名稱分佈在複雜的目錄結構中,深度達到15-20層,我想將它們移動到目錄/我/特/目錄/用特定的擴展名將文件重寫到特定的目錄

我不能想出一個辦法與重寫做到這一點(不是重定向)

我曾嘗試:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/\.]+).png?$ /my/special/directory/$1.png [R] 

但是這部作品的第一級只(根)。我也試過

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-zA-Z0-9/]+)([^/\.]+).png?$ /my/special/directory/$2.png [R] 

但它根本不起作用。我應該如何寫這個?

我正在檢查圖像不存在,因爲此虛擬主機中還有其他目錄包含圖像並將保持原樣。

TIA

回答

0

我真的不明白你嘗試這種模式:^([^/\.]+).png?$ ...

爲什麼?末?爲什麼在文件名中顯式拒絕點?這之所以只適用於「第一層次」肯定是你明確地拒絕接受與包含/這恰好是該文件夾的路徑分隔符...

而且只使用[L]代替[R],因爲你不想要重定向。

這給我們:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)\.png$ /my/special/directory/$1.png [L] 

如果你必須重寫使得只有文件名被捕獲(取決於你的鏈接結構,實際上),這可能會是一個良好的開端:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule /?([^/]+)\.png$ /my/special/directory/$1.png [L] 

注:在第二個變體沒有領先^,因爲你不感興趣的最後一個文件夾分離器之前被指定的路徑是什麼?

+0

我嘗試了這種模式,因爲我試圖將文件名變爲$ 1 - 所以在最後一個/之後是什麼。有時目錄名稱包含點。你發佈的第二條規則在R所有級別上都能正常工作(重定向正確),但是當重寫(L)時它不會 - 拋出404條。 –

+0

聽起來像絕對與相對路徑對我來說是一個問題...你可以發佈基礎應用程序的URL? – arkascha

+0

沒關係我想我會把它作爲一個重定向,它不會有太多開銷,另外,我正在使用CDN。感謝您發佈非常有用的答案! –

相關問題