2013-04-21 77 views
1

我有一個文件夾/pages/腳本php站點設置,其中重寫:htaccess的多個文件重寫根

www.example.com/pages/settings.php

...到...

www.example.com/settings

使用此代碼.htaccess代碼:

RewriteEngine On 
RewriteBase/
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?action=$1 [QSA] 
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?action=$1 [QSA] 

但我也想用戶配置文件來重定向過多:

www.exmaple.com/user123

現在,我不知道這個最好的辦法是什麼,因爲我也有重定向到根頁。

我根據什麼GET變量是url一個user.php其拉動用戶的數據有:

(www.exmaple.com/pages/user.php?username=user123)

但我在想,如果這是可能的改寫與htaccess根以及初始頁面重寫?

我試圖做這樣的東西,但我還沒有得到它正常工作:

RewriteRule ^([a-zA-Z0-9_-]+)$ /pages/user.php?username=$1 [QSA] 
RewriteRule ^([a-zA-Z0-9_-]+)/$ /pages/user.php?username=$1 [QSA] 

任何幫助,將不勝感激。

回答

1

首先,你不需要重複你的規則。您可以在最後

RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?action=$1 [QSA] 

同樣使用/?一個可選的斜槓與

RewriteRule ^([a-zA-Z0-9_-]+)/?$ /pages/user.php?username=$1 [QSA] 

這些規則允許帶或不帶尾部斜槓的請求。

對於你的問題,我不明白你是如何完成這個的,因爲你想將相同的字符串改寫成兩個不同的目標。如果沒有前綴或唯一字符串將用戶與操作請求區分開來,則不能這樣做。

你可以重寫/user/user123這一規則

RewriteRule ^user/([a-zA-Z0-9_-]+)/?$ /pages/user.php?username=$1 [L,QSA] 

你必須把動作規則之前此規則,因爲動作規則有更廣泛的匹配模式。

我也將與

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

前綴的行動規則,以阻止真正的文件,如index.phpuser.php,CSS,JavaScript或圖像文件,被改寫。

+0

謝謝你的幫助!我不認爲你可以建議更好的方法來處理用戶配置文件?也許像'/ user/user123'? – chriz 2013-04-21 16:52:43

+0

@chriz請參閱更新的答案。 – 2013-04-21 17:00:00

+0

非常感謝你,我認爲這就是我的願望! – chriz 2013-04-21 17:02:41