2012-08-31 32 views
1

我現在有一個.htaccess文件,使人們能夠無需PHP擴展輸入網址,這樣http://domain.com/account重定向到account.php使用htaccess的刪除.php然後允許路徑

我想能夠有它,所以如果我輸入http://domain.com/account/contactinfo(或http://domain.com/account/settings/groups等),它仍然到account.php,但我不知道如何改變我必須實現這一點。

當前的.htaccess:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(([A-Za-z0-9\-_\.]+/)*[A-Za-z0-9\-_\.]+)?$ $1.php 

任何幫助表示讚賞!顯然,如果存在一個文件夾,它應該遵循該路徑(例如,如果/folder/page.php存在,則http://domain.com/folder/page/create將進入文件夾/ p​​age.php)

+0

在用戶轉到'/ account/contactinfo'或類似的情況下,您是否需要將任何有關附加URI部分的信息作爲查詢字符串或任何東西傳遞? –

+0

@MikeBrant是的,我想查詢字符串正常傳遞 –

+0

我的意思是,你需要把URI的片斷,並將其作爲查詢字符串傳遞像'/ account/contactinfo'會重定向到/account.php? q = contactinfo'? –

回答

1

嘗試這是你不需要傳遞任何URI信息進入查詢字符串(即你的應用程序將仍然看$_SERVER['REQUEST_URI']

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([A-Za-z0-9\-_\.]+)(/[A-Za-z0-9\-_\.]*)?$ $1.php&q=$2 [QSA] 
# Note the optional '&q=$2' on line above if you want to make removed part of URI available as passed parameter 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^.*$/[L,QSA] 

注意,因爲我刪除檢查一個有效的PHP文件的情況下,我加入了第二個條件重寫規則,只是重定向到網站根目錄,如果重新編寫的請求不會指向有效的PHP文件。你顯然可以將它重定向到404頁面或其他你可能想要重定向到的頁面。或者你可以完全刪除它,讓Apache給它默認的404響應。

+0

這只是發送一切/(或/error.php,因爲我改變了)... –

+0

嗯..奇怪。 '%{REQUEST_FILENAME}'應該寫入第一條規則到'/ *。php',這是一個真實的文件名,這應該是第二個條件的基礎。首先,你可以驗證第一次重寫是否按預期工作?第二部分更讓我思考。它也可能有助於將標誌R&L添加到第一條規則中,以進行故障排除,如[R,L,QSA]。這會暫時丟失乾淨的URL,但會允許您在瀏覽器中看到重寫實際上的行爲。 –

+0

我想通了。第一個重寫規則應該重寫爲$ 1.php而不是/ $ 1.php - 現在它起作用了!謝謝 –