You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.htaccess重写规则含空格变量失效问题求助

问题分析与解决方案

核心问题

你的重写规则失效是因为第二个RewriteRule的正则表达式没有包含空格字符。

原规则中的捕获组([0-9a-zA-Z_-]+)仅匹配字母、数字、下划线和连字符,当路径中出现空格(比如john cena)时,这个规则无法匹配请求,请求会被前面的^([^\.]+)$ $1.php规则处理——它会尝试寻找partners/1/john cena.php文件,显然该文件不存在,导致访问失败。

修正步骤

  1. 修复正则表达式,允许匹配空格
    修改第二个RewriteRule,把捕获组改成包含空格的形式,比如:

    RewriteEngine On
    
    #RewriteRule ^index$ index.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^\.]+)$ $1.php [NC,L]
    
    # 允许捕获组包含空格
    RewriteRule ^partners/([0-9]+)/([0-9a-zA-Z_\s-]+) partners.php?id=$1&name=$2 [NC,L]
    

    这里\s代表匹配任意空白字符(包括空格、制表符等),如果你只想匹配空格,也可以直接把空格加入字符集:([0-9a-zA-Z_ -]+)(注意连字符放在最后,避免被解析为范围符)。

  2. 修正语法错误
    原规则中第一个RewriteCond {REQUEST_FILENAME} !-d缺少百分号,正确写法是RewriteCond %{REQUEST_FILENAME} !-d,否则该条件不生效,可能引发其他重写异常。

补充说明

浏览器在处理地址栏中的空格时,会自动将其编码为%20,Apache在处理RewriteRule时会自动解码%20为空格,所以修正后的规则可以正常匹配这类请求。

内容的提问来源于stack exchange,提问作者Samin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 16:13:37