2012-08-05 48 views
1

我已經成功地使用.htaccess規則將幾乎所有的url從舊窗體重新寫入到了精細的URL中。但我有一個問題,一些地址格式httaccess URL重寫問題

如 example.com/myusername工作正常 而 example.com/my.username拋出回404找不到網頁

注:my.username是我的數據庫中的有效用戶名。請我該如何解決這個問題

更新:這是對.htaccess文件的完整代碼

# -FrontPage- 

IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti* 

#ErrorDocument 404 example.com 

RewriteEngine on 

RewriteRule ^(.*)\.htm$ $1.php [nc] 

RewriteRule ^([a-zA-z0-9_-]+)$ community/profile.php?_username=$1 
+2

所得請發表您的.htaccess的代碼(我們不能幫助你,直到你做......) – Oussama 2012-08-05 13:42:11

+1

請提供一些代碼。 – 2012-08-05 13:42:14

+1

@Yazmat我已經提供了代碼..我必須編輯問題。謝謝 – 2012-08-05 14:19:46

回答

2

你的問題是,你不包括點在這個正則表達式(。)線(因爲my.username包含一個圓點):

RewriteRule ^([a-zA-z0-9_-]+)$ community/profile.php?_username=$1 

它改成這樣:

RewriteRule ^([a-zA-z0-9_.-]+)$ community/profile.php?_username=$1 

請注意,可能在用戶名中的任何字符必須添加到正則表達式中(現在它支持字母數字,下劃線,短劃線和點)。

+1

感謝poncha(是的,短跑應該永遠是最後的) – Oussama 2012-08-05 14:52:40

+0

感謝您的答案。至少我今天知道了。我嘗試了表達式 RewriteRule ^([a-zA-z0-9 _-。] +)$ community/profile.php?_username = $ 1 但是它返回了500個未找到服務器錯誤。然後我必須這樣改變它 RewriteRule ^([.a-zA-z0-9 _-] +)$ community/profile.php?_username = $ 1 它確實有效。 @Poncha也感謝編輯 – 2012-08-05 14:53:39

+0

poncha和@Yazmat請問什麼是破折號是最後的邏輯或原因,爲什麼點是最後返回500內部服務器錯誤? – 2012-08-05 14:58:57

0
  1. 您需要而不是如果第一條規則匹配,則應用兩條規則。添加L標誌。沒有它,「abc/def.htm」將變成「community/profile.php?_username = abc/def.php」。
  2. 第二條規則丟失。作爲允許的角色。
  3. (可能)您希望爲兩個規則保留參數。添加QSA標誌。

RewriteRule ^(.*)\.htm$ $1.php [nc,L,QSA] 

RewriteRule ^([a-zA-z0-9_.-]+)$ community/profile.php?_username=$1 [L,QSA]