WordPress自定义页面路由:如何将动态URL转为友好路径?是否需.htaccess规则?
嘿,这个需求太常见了,咱们一步步来搞定👇
核心实现方案(Apache环境下推荐用.htaccess)
这是最直接且通用的做法,先给你说清楚前提和具体规则:
前置条件
- 你的服务器是Apache(如果是Nginx的话规则不一样,后面会提)
- 已经开启了
mod_rewrite模块(大部分主机默认开启,不确定的话可以看phpinfo里的信息,或者问主机商) - 网站根目录有
.htaccess文件(没有的话直接新建一个,注意文件名前面的点不能省略)
具体重写规则
把这段代码放到你的.htaccess文件里:
# 开启URL重写引擎 RewriteEngine On # 跳过真实存在的文件/目录,避免干扰静态资源访问 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 把友好URL转发到实际PHP页面 RewriteRule ^brand/([a-zA-Z0-9_-]+)$ c-page.php?brand=$1 [L,QSA]
规则解释
RewriteEngine On:必须先开启重写功能,否则下面的规则都无效- 两条
RewriteCond:确保只有当请求的不是真实文件(比如图片、CSS)或目录时,才执行重写,防止把静态资源的请求也转发到PHP页面 RewriteRule:^brand/([a-zA-Z0-9_-]+)$:匹配site.com/brand/xxx这种格式的URL,括号里的([a-zA-Z0-9_-]+)会捕获品牌名(比如hp),用$1来引用c-page.php?brand=$1:把请求偷偷转发到实际的c-page.php,并把捕获到的品牌名作为brand参数传递[L,QSA]:L表示匹配到这条规则就停止后续处理;QSA是指如果用户在友好URL后面加了额外参数(比如site.com/brand/hp?sort=price),会自动把这些参数附加到原有请求上,不会丢失
必须用.htaccess吗?
答案是不一定:
- 如果是Nginx服务器:需要在Nginx的站点配置文件里写重写规则,示例如下:
location /brand/ { try_files $uri $uri/ /c-page.php?brand=$1; rewrite ^/brand/([a-zA-Z0-9_-]+)$ /c-page.php?brand=$1 last; } - 如果用PHP框架(比如Laravel、WordPress):可以直接用框架自带的路由系统来配置,不需要手动写服务器层面的重写规则
- 但如果是纯PHP小项目,
.htaccess无疑是最简单、零额外依赖的方案
小提示
- 测试前记得清除浏览器缓存,不然可能会看到旧的URL效果
- 如果
c-page.php不在网站根目录,要调整规则里的路径(比如在/pages/c-page.php,就写成pages/c-page.php?brand=$1) - 可以根据品牌名的实际格式调整正则表达式,比如允许空格或特殊字符的话,修改
[a-zA-Z0-9_-]+的部分就行
内容的提问来源于stack exchange,提问作者fran35
相关产品推荐
相关产品推荐

