2011-07-21 68 views
1

我的htaccess位於localhost/me/.htaccess,我想在最後追加什麼/名爲.php的mod_rewrite的最後一場比賽

例如localhost/me/test/index重寫爲localhost/me/test/index.php

到目前爲止RewriteRule ^([A-Za-z]+)$ $1.php [NC,L]作品localhost/me/index,但我不能讓它工作的第一個例子在那裏。爲什麼^/([A-Za-z]+)$ /$1.php [NC,L]沒有工作,我該如何改變它的工作?

+0

有沒有在一段時間內重寫過,但'^'可能會迫使它匹配從可能包含多個斜槓(?)的路徑的開始的所有方式在這種情況下,永遠不會得到一場比賽。所以我只會嘗試拋棄'^'看看會發生什麼。 '$'已經把它掛到了最後,並且這個模式應該是貪婪的。所以它會在斜線後一直吃完所有東西。 – Casper

回答

1

它不起作用,因爲您只匹配字母字母,並且字符類中沒有/,但是您的URI是me/test/index。試試這個:,

RewriteEngine On 
RewriteRule ^([A-Za-z/]+)$ $1.php [NC,L,QSA] 

此外,由於你使用[NC],你真的只需要a-z而不是A-Za-z但它不會傷害任何東西。

2

使用此規則:

# add .php file extension 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.+)$ $1.php [L,QSA] 
  1. 它會檢查是否重寫

  2. 你有主要的問題之前,存在這樣的.PHP是你的模式:^([A-Za-z]+)$它將匹配index但不test/index因爲它只允許a-z個字符。您需要將/加入模式:^([a-z/]+)$

  3. ,因爲你有[NC]標誌(不匹配的情況下),沒有必要同時擁有A-Za-z

  4. 我使用更多的全球/通用模式(.+) - 它將匹配任意字符,因爲它帶有「檢查文件是否存在」的條件,不需要擔心有限的字符集。

+0

+1'(。+)'比我的完整。 –

+0

儘管這個答案更廣泛,但是由於(。+)'修飾符匹配擴展名,它迫使我添加RewriteCond。邁克爾的答案更簡單。它允許.php擴展名通過,因爲它不會匹配正則表達式,並且不會影響我的其他文件,比如我的樣式表。儘管我注意到了[NC]標誌,但我做出了積極努力! – Drahcir