.htaccess配置:将动态Product.php URL重写为根目录静态产品路径
解决URL重写404问题的完整方案
我来帮你搞定这个URL重写的麻烦!你现在遇到404错误,核心问题是现有规则的正则表达式没覆盖产品名称里的连字符(-),还有几个关键配置细节没到位。咱们一步步来调整:
1. 补全基础配置前提
首先,你的.htaccess必须放在网站根目录(和Product.php同目录),而且要先开启Rewrite引擎,这是重写规则生效的基础。
2. 修正正则表达式并合并规则
你原来的规则只匹配字母数字,但产品名里有-,得把这个字符加入匹配范围。另外,我们可以把两条规则合并成一条,用可选的斜杠/?同时处理带/和不带/的URL,避免重复代码。
3. 增加反向重定向(SEO友好必备)
为了避免重复内容影响SEO,当用户直接访问旧的动态URL时,要自动重定向到新的美观URL,这部分也得加上。
完整的.htaccess配置
# 开启重写引擎 RewriteEngine On # 关闭Apache的MultiViews,防止干扰重写规则 Options -MultiViews # 把旧动态URL重定向到新静态URL(永久重定向,利于SEO) RewriteCond %{THE_REQUEST} ^GET\ /Product\.php\?product=([^\s&]+) RewriteRule ^ /%1/? [R=301,L] # 把新静态URL内部转发到实际的Product.php文件 RewriteRule ^([a-zA-Z0-9-]+)/?$ Product.php?product=$1 [L]
关键细节解释
Options -MultiViews:关闭Apache的内容协商功能,防止它自动匹配文件导致重写规则失效。- 第一条规则是外部重定向:用户访问
Product.php?product=xxx时,浏览器会跳转到/xxx/,301状态码表示永久重定向,对搜索引擎友好。 - 第二条规则是内部重写:用户访问
/xxx/或/xxx时,服务器内部悄悄转发到Product.php?product=xxx,用户看不到实际的PHP文件路径。
测试要点
- 确认
.htaccess在网站根目录,权限设置为644(常规可读写权限)。 - 测试访问
www.domain.co.uk/solid-oak-dining-table/和www.domain.co.uk/solid-oak-dining-table,应该都能正常打开产品页面。 - 测试旧URL
www.domain.co.uk/Product.php?product=solid-oak-dining-table,应该自动跳转到新URL。
这样调整后,就能完美实现你想要的产品名称位于根目录的URL形式了!
内容的提问来源于stack exchange,提问作者user2005386
相关产品推荐
相关产品推荐

