PHP动态商城页面URL后缀异常问题求助
解决URL后加随机字符导致的资源缺失与跳转异常问题
问题根源
你遇到的情况是服务器把index.php/asfjasflk这类URL解析为:以index.php作为执行脚本,后面的/asfjasflk当作额外的路径信息(PATH_INFO),所以页面能加载,但浏览器会把相对路径的资源(比如img/shop.jpg)当成index.php/img/shop.jpg请求,自然找不到;点击链接时也会基于当前错误的URL路径拼接,导致URL被改写。
解决方案
1. 用.htaccess重定向异常请求到对应页面或主页
在网站根目录的.htaccess文件中添加以下规则,把所有xxx.php/随机字符这类无效请求重定向回正常页面,或者直接跳转到主页:
# 开启Rewrite引擎 RewriteEngine On # 匹配非真实文件/目录的xxx.php/xxx格式请求,重定向到xxx.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+\.php)/.*$ /$1 [R=301,L] # 如果想直接跳转到主页(比如index.php),替换上面的RewriteRule为: # RewriteRule ^(.+\.php)/.*$ /index.php [R=301,L]
R=301是永久重定向,能让浏览器和搜索引擎记住正确的URL;L表示执行完这条规则后停止后续处理。- 前两条
RewriteCond是为了排除真实存在的文件和目录,避免影响正常资源访问。
2. 修复页面内的资源与链接路径
不管重定向是否生效,都建议把页面里的所有资源(图片、CSS、JS)和内部链接改成绝对路径(从网站根目录开始):
- 错误写法:
<img src="img/logo.png">、<a href="login.php">登录</a> - 正确写法:
<img src="/img/logo.png">、<a href="/login.php">登录</a>
如果是PHP动态生成路径,可以定义一个根路径常量,方便统一维护:
// 放在公共配置文件里,比如config.php define('BASE_URL', '/'); // 如果你的网站在子目录(比如免费主机给的子域名目录),改成'/你的子目录名/'
然后在页面中使用:
<img src="<?php echo BASE_URL; ?>img/logo.png" alt="商城logo"> <a href="<?php echo BASE_URL; ?>login.php">登录</a>
3. 检查免费主机的Rewrite支持
有些免费主机需要在控制面板里手动开启URL Rewrite功能(不是只在.htaccess里写RewriteEngine On),你可以去主机后台找"URL重写"或"伪静态"相关选项,确认已启用。
如果自定义404页面无效,确保.htaccess里的设置路径正确:
ErrorDocument 404 /404.php
这里的404.php要放在网站根目录,路径不能错。
内容的提问来源于stack exchange,提问作者Dit
相关产品推荐
相关产品推荐

