我想將某個目錄下的合法目錄名重定向到PHP文件。我發現this answer,這似乎是說,我可以做這樣的事情在根的.htaccess:將嵌套目錄重定向到.php
RewriteEngine on
RewriteRule /([^/]+) processDir.php?dir=$1 [B,QSA]
我想這就是我要找的,但有一個辦法:
- 將它限制在目錄中,但允許嵌套目錄?
- 僅篩選目錄:我不想處理文件。
我想將某個目錄下的合法目錄名重定向到PHP文件。我發現this answer,這似乎是說,我可以做這樣的事情在根的.htaccess:將嵌套目錄重定向到.php
RewriteEngine on
RewriteRule /([^/]+) processDir.php?dir=$1 [B,QSA]
我想這就是我要找的,但有一個辦法:
我打算刪除這個問題,但有人收藏它,所以我會回答它。
使用像一個.htaccess這個
RewriteEngine on
RewriteRule ([^/]*)/$ processDir.php [B,QSA]
,然後你可以processDir.php這個變量來使用GET而不是:
<?
dir is <?php
echo $_SERVER["REQUEST_URI"];
?>
我對正則表達式提出的主要修改(稍後有人會修正)是堅持在字符串的末尾加上斜線。
我想你要找的是RewriteCond
,它可以讓你有條件地應用重寫規則。這一次檢查,如果事情是一個目錄:
RewriteCond %{REQUEST_FILENAME} -d
你放在RewriteRule
上面使用它,像這樣:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule /([^/]+) processDir.php?dir=$1 [B,QSA]
這將無論是在你的問題的方法或你的答案工作,需要注意的重要一點是,在應用規則之前,-d
標誌首先檢查請求是否爲有效的目錄,這是您似乎想要的。
從我收集的內容來看,問題的第二部分是關於嵌套目錄。你的正則表達式,特別是只查找一個目錄(不用斜槓)。如果你想改變,你可以做這樣的事情:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule /?some_dir/(.*) processDir.php?dir=$1 [B,QSA]
這將需要以下some_dir
任何有效目錄和飼料是到PHP文件。
要注意的最後一件事是,你不需要把所有這一切都放到你的根.htaccess
文件中。您可以將.htaccess
文件放入您要重寫的目錄中。這樣或那樣做沒什麼區別,但我發現它可以簡化語法,如果你不確定你在做什麼。
太棒了,謝謝。 +1,現在我有機會嘗試這一切,我會回覆評論(或者接受這個)。 [B,QSA]做什麼(當然,你也可以鏈接到某些東西)? – 2013-02-20 18:06:13
@Y B用於轉義,QSA用於查詢字符串。雖然,我只是單單從你的帖子中找到那些人。更多細節請參見http://httpd.apache.org/docs/current/rewrite/flags.html – 2013-02-21 00:26:28