[英]splitting directory/folder into small directories with htaccess mod_rewrite
我對mod_rewrite感到很糟糕,甚至不確定這是否是我最好的方法。
我有一個/ image目錄,其中包含20,000個左右的圖像。 我的網站管理員說,除非我將每個目錄的文件限制在2500個以下,否則他們將停用我的帳戶。
所以我想更改它,以便/images/apple.jpg
重定向到/images/a/apple.jpg
,和/images/banana.jpg
重定向到/images/b/banana.jpg
以便每當php文件調用/images/apple.jpg
它將重定向。 相反,任何創建的新圖像都需要放在正確的目錄中。
我想對PHP進行編碼,但是在736個文件中引用了我的圖像目錄。
如果有人有更好的主意-我願意接受主意。
將.htaccess重定向到新目錄似乎不是最好的主意,因為此時您至少需要8個不同的目錄(以及8個不同的重寫規則)才能將20000個文件拆分為最大2500個文件的目錄。 因此,明天將需要9個目錄,更不用說使用重寫規則來選擇進入每個目錄的文件可能會變得非常困難。
我想最好的選擇是用數組或任何需要的東西在PHP腳本中處理該路由。
您可以將進入/images
目錄的所有內容重定向到根目錄下的php腳本,例如,然后根據傳遞給腳本的參數將其重定向到適當的目錄
像這樣:
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !handler.php
RewriteCond %{REQUEST_URI} ^/images/([^\.]+)\.([\w]+)/? [NC]
RewriteRule .* handler.php?name=%1&ext=%2 [L]
靜默映射:
http://example.com/images/filename.ext
帶有或不帶有斜杠。
至:
http://example.com/handler.php?name=filename&type=ext
要僅將一個參數傳遞給腳本,或者將名稱和擴展名傳遞給腳本,只需將重寫規則替換為該參數:
RewriteRule .* handler.php?%1.%2 [L]
這只是一個例子。 腳本handler
可以具有任何名稱,因此鍵name
和type
(如果使用)。
必須保留傳入的URL結構才能使規則集起作用:URL內的最后一個字符串必須是文件。
對於永久的和可見的重定向,請將[L]
替換為[R=301,L]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.