htaccess URL重写问题

时间:2012-08-05 13:40:12

标签: .htaccess url-rewriting

我使用.htaccess规则成功地将旧表单中的几乎所有网址重新编写为精细网址。但我的一些地址格式存在问题

e.g     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 个答案:

答案 0 :(得分:2)

您的问题是您没有在此行的正则表达式中包含点(。)(因为my.username包含一个点):

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

将其更改为:

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

请注意,您必须添加到正则表达式的用户名中的任何字符(现在它支持字母数字,下划线,短划线和点)。

答案 1 :(得分:0)

  1. 如果第一条规则匹配,您需要应用这两条规则。添加L标志。没有它,“abc / def.htm”将成为“community / profile.php?_username = abc / def.php”。
  2. 缺少第二条规则。作为一个允许的角色。
  3. (可能)您希望为两个规则保留参数。添加QSA标志。
  4. 导致

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