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

如何通过.htaccess实现store目录下PHP URL自定义重写

规则不生效的核心原因
  • 你当前的规则未匹配/store/路径前缀:如果.htaccess放在站点根目录,默认匹配的是根路径下的资源,不会命中/store/下的请求
  • 若你要使用store_name而非数字ID作为参数,需要确认store.php已适配按名称查询店铺数据的逻辑
调整后的配置

分两种部署场景选择:

场景1:.htaccess放在/store子目录下

直接使用如下配置即可:

RewriteEngine On
# 跳过真实存在的文件和目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 匹配/store/后的字符串作为参数传给store.php
RewriteRule ^([A-Za-z0-9_-]+)/?$ store.php?id=$1 [NC,L]

场景2:.htaccess放在站点根目录下

需要添加/store前缀匹配:

RewriteEngine On
# 跳过真实存在的文件和目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 匹配/store/后的字符串作为参数传给/store/store.php
RewriteRule ^store/([A-Za-z0-9_-]+)/?$ /store/store.php?id=$1 [NC,L]
生效前检查项
  • 确认Apache已开启mod_rewrite模块,且站点配置中AllowOverride参数设置为All,否则.htaccess规则不会被加载
  • 清除浏览器缓存后再测试,避免之前的重定向缓存干扰结果
  • 若你使用店铺名称作为URL参数,需修改store.php的查询逻辑,把原来按数字ID查询的逻辑改为按传入的name参数查询
补充:旧URL自动跳转新格式

如果需要用户访问原带参数的旧URL时自动跳转到新的简洁格式,可额外添加以下规则(以.htaccess放在/store子目录为例):

RewriteCond %{THE_REQUEST} /store\.php\?id=([^\s&]+) [NC]
RewriteRule ^ /store/%1? [R=301,L]

末尾的?作用是去掉跳转后URL上的原始查询参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:36:04