1

我已经使用 .htaccess 规则成功地将几乎所有的 url 从旧​​形式重写为精细 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
4

2 回答 2

2

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

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

将其更改为:

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

请注意,用户名中的任何字符都必须添加到正则表达式中(目前它支持字母数字、下划线、破折号和点)。

于 2012-08-05T14:36:08.107 回答
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]
于 2012-08-05T15:12:16.807 回答