2011-10-14 107 views
0

基本上,我一直在試圖通過使用mod_rewrite的.htaccess製作一些友好的URL - 而且我設法讓它工作......但只有像基本的東西 - :mod_rewrite實際上並沒有...重寫URL

RewriteEngine On 
RewriteBase/
RewriteRule ^profile.php http://www.google.co.uk [L] 

所以mod_rewrite的作品,我可以重新定向到其它網站,其它文件/在我的服務器等目錄,但它似乎不是當我用這個工作

RewriteEngine On 
RewriteBase/
RewriteRule ^profile.php?user=$1 ^profile/user/([^/]*)/$ [L] 

對此的任何幫助都會很棒,因爲我非常喜歡mod_rewrite,但這是我需要學習的東西。

乾杯!

回答

0

錯誤。

  ## rewriting from   to 
RewriteRule ^profile.php?user=$1 ^profile/user/([^/]*)/$ [L] 

應該是

  ## rewriting from   to 
RewriteRule ^profile/user/([^/]+)$ profile.php?user=$1 [L] 
+0

告訴你我是一個n00b。 :P 此外,這似乎還沒有爲我工作,這是煩人的。 – Matt

+0

@Matt:你想要訪問什麼網址? – genesis

+0

我試圖從:profile.php?user = {USERNAME} 重定向到:/ profile/user/{USERNAME] – Matt

0

您的配置目前是這樣的:

RewriteEngine On 
RewriteBase/
RewriteRule ^profile.php?user=$1 ^profile/user/([^/]*)/$ [L] 

RewriteRule從交換了和向參數。

假設你的服務器上有一個目錄結構是這樣的:

/var/www/htdocs/profile/user/albert 
/var/www/htdocs/profile/user/bob 

然後你可以使用以下規則:

RewriteCond ${QUERY_STRING} ^user=(\w+)$ 
RewriteRule ^profile\.php$ profile/user/%1 [L] 

有,你有什麼錯在這裏的一些要點:

  • 對「/profile.php?user=bob」的請求首先被分割爲請求URI查詢字符串mod_rewrite僅使用請求URI。因此你必須單獨處理查詢字符串。
  • 我將用戶名限制爲只有[A-Za-z0-9_]。如果我允許所有角色,攻擊者可以輕鬆地調用/profile.php?user=../../config.php,這將被重寫爲profile/user/../../config.php,並且您可能不想將該文件與世界分享。
  • RewriteRule指令的參數在語法上完全不同。
    • 第一個參數(該部分)是正則表達式,其通常與插入符號^開始和以美元$結束。
    • 第二個參數(部分)是替代品,它幾乎只是一個簡單的字符串,只有一些特殊功能。這個字符串通常不會以插入符號開頭,但看起來更像是一個路徑名。