含点号的用户Profile URL重写问题:.htaccess规则无效求助
解决URL重写误匹配真实文件的问题
你的规则会错误匹配register.php、styles.css这类真实存在的文件,核心原因是正则^([@a-zA-Z0-9._-]+)$会匹配任何由允许字符组成的完整路径——不管这个路径对应真实文件还是用户名。
解决办法是先排除真实存在的文件和目录,再应用重写规则,具体配置如下:
# 排除真实存在的文件 RewriteCond %{REQUEST_FILENAME} !-f # 排除真实存在的目录 RewriteCond %{REQUEST_FILENAME} !-d # 匹配用户名格式的URL(兼容带/不带末尾斜杠的情况) RewriteRule ^([@a-zA-Z0-9._-]+)/?$ user.php?p=profile&username=$1 [L]
关键细节说明:
!-f:判断请求路径是否不是真实存在的文件,确保register.php这类真实文件不会被重写!-d:判断请求路径是否不是真实存在的目录,避免误匹配目录路径- 用
/?合并了两条规则,匹配末尾可选的斜杠,简化配置 [L]标记表示这是最后一条规则,匹配成功后不再执行后续重写逻辑
这样配置后,只有当请求的路径不存在对应文件/目录时,才会被解析为用户名,不会影响正常的静态文件和脚本访问。
内容的提问来源于stack exchange,提问作者you
相关产品推荐
相关产品推荐

