如何通过htaccess实现伪静态URL:用商品名访问电商商品
解决方案
以下是调整后的完整.htaccess配置,既满足你的商品URL需求,又保留原有功能:
RewriteEngine On # 强制HTTPS跳转 RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$ RewriteCond %{REQUEST_URI} !^/\.well-known/cpanel-dcv/[0-9a-zA-Z_-]+$ RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/(?:\ Ballot169)? RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 商品URL重写:匹配 /Products/Product-Name 指向 products.php RewriteRule ^Products/([^/]+)$ products.php?product=$1 [NC,L,QSA] # 自动添加.php后缀(仅当文件不存在时) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$ RewriteCond %{REQUEST_URI} !^/\.well-known/cpanel-dcv/[0-9a-zA-Z_-]+$ RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/(?:\ Ballot169)? RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ RewriteRule ^([^\.]+)$ $1.php [NC,L] # 自动添加.html后缀(仅当文件不存在时) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$ RewriteCond %{REQUEST_URI} !^/\.well-known/cpanel-dcv/[0-9a-zA-Z_-]+$ RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/(?:\ Ballot169)? RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ RewriteRule ^([^\.]+)$ $1.html [NC,L]
关键规则说明
商品URL重写
- 匹配规则
^Products/([^/]+)$精准捕获/Products/后的商品名称(不包含斜杠) - 转发到
products.php时,通过$1将商品名作为product参数传递,后端PHP可通过$_GET['product']直接获取,同时前端JS能正常读取原URL路径 - 标记
[NC]允许大小写兼容访问,[L]确保此规则执行后不再触发后续规则,[QSA]保留原URL的查询参数(如/Products/Shirt?size=M会保留参数)
- 匹配规则
规则顺序
- 优先执行HTTPS跳转,确保全站加密
- 然后处理商品URL重写,避免被自动加后缀的规则干扰
- 最后保留原有自动添加
.php/.html后缀的功能,仅对不存在的文件生效
注意事项
- 确认服务器已启用
mod_rewrite模块 - 测试前清除浏览器缓存(301跳转是永久缓存的)
- 若商品名含特殊字符,需在生成URL时做URL编码,后端会自动解码
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

