2

我使用 .htaccess 将我的网址从

www.mysite.com/profile.php?name=name

www.mysite.com/name/name

但是我遇到了一个问题,如果名称有空格而不是显示用户数据,它会将我带到我的 404 页面。我已经对名称进行了编码,因此如果有空格,它会用 %20 替换它,但它仍然不工作..没有空格的名字工作得很好

重写规则:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?name=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?name=$1
4

2 回答 2

1

看看你的重写规则。你有一个正则表达式,上面写着“一个或多个字母或数字”:

[a-zA-Z0-9_-]+

空格不是其中之一。这就是为什么它不匹配。将 \s 添加到正则表达式:

[a-zA-Z0-9_-\s]+

于 2012-11-04T23:31:51.520 回答
1

您用于重写的正则表达式不考虑空格或编码字符。相反,它只匹配字母、数字、下划线或破折号。

试试这个:

RewriteRule /(.+) /profile.php?name=$1 [L]

根据您的示例,我希望该规则看起来更像:

RewriteRule /name/(.+) /profile.php?name=$1 [L,QSA]

这将匹配整个 GET 路径并将其作为 $1 传递给重写。如果您需要附加其他查询字符串参数,请参阅QSA标志。

于 2012-11-04T23:32:04.560 回答