OVH服务器Apache下.htaccess URL重写后$_GET丢失404问题求助
问题解决步骤
你当前仅配置了旧URL到美化URL的单向跳转规则,缺少美化URL到实际PHP脚本的内部重写规则,所以访问美化地址时Apache找不到对应资源返回404,也无法将ID传递给$_GET参数。
前置检查
- 确认rewrite模块已启用:执行
sudo a2enmod rewrite,返回启用成功即可 - 确认站点配置允许.htaccess生效:编辑
/etc/apache2/sites-available/000-default.conf(对应你的站点配置文件),在<Directory /var/www/html>段落中将AllowOverride None改为AllowOverride All,执行sudo systemctl restart apache2重启服务生效
完整.htaccess配置
RewriteEngine On # 规则1:旧带参URL 301跳转到美化URL,避免旧链接失效 RewriteCond %{REQUEST_URI} ^/productPage\.php$ RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ RewriteRule ^(.*)$ /productPage%1? [R=301,L] # 规则2:美化URL内部重写到实际PHP脚本,地址栏不变,参数正常传入 RewriteRule ^productPage([0-9]+)$ /productPage.php?id=$1 [L]
注意事项
- 调试阶段可以先把
R=301改成R=302,防止301永久跳转被浏览器缓存,导致规则更新后不生效,确认所有功能正常后再改回301 - 原有PHP代码不需要做任何修改,
$_GET['id']可以正常读取到ID值,所有依赖该参数的CRUD逻辑不受影响 - 如果需要适配多个类似的页面(比如详情页、列表页),可以仿照规则2新增对应的重写规则即可
内容的提问来源于stack exchange,提问作者Zntlm
相关产品推荐
相关产品推荐

