上传文件至在线主机时遭遇HTTP 400错误及自定义URL失效问题
解决HTTP 400错误与自定义URL失效问题
问题根源分析
.htaccess规则顺序错误,导致自定义产品URL先被强制添加.php后缀,引发文件不存在的连锁问题index.php中的正则表达式语法错误,生成了无效的URL路径,触发HTTP 400错误- 虚拟主机可能未开启
.htaccess的Rewrite权限
修复步骤
1. 修正.htaccess配置
调整规则顺序,修复正则匹配逻辑,确保自定义URL优先被处理:
Options +FollowSymlinks -MultiViews RewriteEngine On # 优先处理产品详情页自定义URL重写 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^product/single/([0-9]+)/([a-zA-Z-]+)$ single.php?id=$1&name=$2 [QSA,L] # 隐藏.php后缀(仅对真实存在的php文件生效) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [L] # 禁止直接访问.php文件,返回404 RewriteCond %{THE_REQUEST} \s/+.+\.php[\s?] RewriteRule ^ - [L,R=404]
- 关键修改:将产品URL重写规则移至最前端,避免被
.php后缀隐藏规则拦截 - 补充
-MultiViews禁用内容协商,防止服务器自动解析文件 - 修正重写目标为
single.php(原规则遗漏.php后缀) - 优化
THE_REQUEST正则,更精准匹配直接访问.php的请求
2. 修复index.php中的正则错误
原preg_replace的正则存在语法错误(方括号内的]位置非法),导致生成无效URL:
<a href="product/single/<?php echo $rowa['id']; ?>/<?php echo preg_replace('/[^\p{N}\s]/u', '-', $rowa['name']); ?>"> <img src="admin/assets/product_image/<?php echo $rowa['product_image']; ?>" alt=" " class="img-responsive img_div_2" style="height:200px; width:80%;" /></a>
- 关键修改:将正则
/[]^\p{N}\s]/u改为/[^\p{N}\s]/u,正确匹配非数字、非空白字符并替换为-
3. 虚拟主机权限验证
联系虚拟主机服务商,确认站点配置中已开启AllowOverride FileInfo或AllowOverride All,否则.htaccess的Rewrite规则无法生效。
4. 额外排查
- 检查服务器错误日志,查看HTTP 400错误的具体触发原因(如非法字符、重写循环)
- 确保
single.php文件存在于站点根目录,文件权限设置为644
内容的提问来源于stack exchange,提问作者user19165954
相关产品推荐
相关产品推荐

