wordpress add_rewrite_rule使用注意事项 重写路由

使用wordpress来进行开发的开发者们,你们在使用add_rewrite_rule这个函数来进行路由重写的时候,务必注意以下事项

1.将后台->设置->固定链接->常用结构,选择“自定义结构”并进行设置。这步很重要!只有在自定义结构下重写路由才可能生效;

2.重写路由后打开后台->设置->固定链接,进行保存更改,更新重写的路由。

具体步骤请参考路由重写这个页面的步骤来进行,有问题请给我留言,我会尽可能解答的。

<think>嗯,用户提到在设置固定链接为“朴素”时无法正常访问/blog,而其他类型都可以。首先需要理解WordPress的固定链接设置。朴素模式通常是默认的,使用类似?p=123的URL结构,而其他模式如“文章名”会生成更友好的URL。用户的问题可能出在服务器配置或重写规则上。 当使用非朴素模式时,WordPress会依赖.htaccess文件(对于Apache服务器)或Nginx的rewrite规则来重写URL。如果设置为朴素,不需要这些重写规则,但用户提到访问/blog时出现问题。这可能意味着/blog是一个页面或自定义结构,而朴素模式不支持这种固定链接结构。 接下来,检查.htaccess文件的权限和内容是否正确。如果服务器是Apache,确保AllowOverride设置为All,以便WordPress可以修改.htaccess。对于Nginx,可能需要手动添加重写规则,因为Nginx不自动处理.htaccess。 另外,检查permalink结构是否有冲突。如果/blog是一个存在的页面或分类,可能与固定链接设置冲突。此外,插件冲突也可能导致问题,尤其是缓存或安全插件,可以尝试禁用插件排查。 还有可能是文件权限问题,确保.htaccess可写,或者服务器未正确配置mod_rewrite模块。需要逐步排查这些可能性,从服务器配置开始,再到WordPress的设置和插件,逐一排除故障点。</think>--- ### **问题定位与解决方案** 你的问题核心在于:**WordPress固定链接设置为“朴素”模式(Plain)时,`/blog`路径无法访问,而其他模式正常**。以下是具体原因和解决方法: --- #### **1. 根本原因分析** - **“朴素”模式的特性**: - 朴素模式使用默认的URL结构(如 `?p=123`),不依赖服务器重写规则。 - 当访问 `/blog` 时,WordPress会尝试直接解析该路径为页面(Page)、分类(Category)或文章(Post),但未匹配到有效内容,导致404错误。 - **其他模式正常的原因**: - 如“文章名”“自定义结构”等模式启用了URL重写(依赖 `.htaccess` 或 Nginx规则),强制将请求路由WordPress主入口 `index.php`,因此能正确处理 `/blog` 这类自定义路径。 --- #### **2. 关键排查步骤** ##### **① 检查服务器配置** - **Apache服务器**: 确保 `.htaccess` 文件存在且包含WordPress重写规则(朴素模式无需重写,但其他页面可能依赖它): ```apache # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress ``` - 验证权限:通过FTP确认 `.htaccess` 可写(权限644)。 - **Nginx服务器**: 检查站点配置中是否包含以下规则(朴素模式不依赖该规则,但其他路径可能需手动配置): ```nginx location / { try_files $uri $uri/ /index.php?$args; } ``` ##### **② 验证固定链接与页面冲突** - **确认 `/blog` 的用途**: - 如果 `/blog` 是文章列表页(如设置“阅读设置→文章页”为某个页面),需确保该页面存在且未删除。 - 如果 `/blog` 是自定义页面或分类目录,尝试在朴素模式下直接访问其真实URL(如 `?page_id=456`)。 ##### **③ 排除插件或主题冲突** - 临时切换至默认主题(如Twenty Twenty-Four)。 - 禁用所有插件,逐步启用以排查冲突(尤其是SEO、重定向类插件)。 --- #### **3. 解决方案** - **方案1:强制重写(推荐)** 即使使用朴素模式,也可通过代码强制路由 `/blog`: 在主题的 `functions.php` 中添加: ```php add_action('init', 'custom_rewrite_rule'); function custom_rewrite_rule() { add_rewrite_rule('^blog/?', 'index.php?pagename=blog', 'top'); } ``` - 保存后到后台**重新保存固定链接设置**以刷新规则。 - **方案2:放弃朴素模式** 使用“自定义结构”并设置如 `/index.php/%postname%/`,兼容性更强且无需依赖服务器重写。 --- #### **4. 验证结果** - 访问 `http://你的域名/blog`,检查是否显示预期内容。 - 若仍失败,通过 **【开发者工具→网络】** 查看HTTP状态码: - **404**:路径未正确映射到WordPress。 - **500**:服务器配置错误(检查PHP日志)。 --- ### **总结** 根本矛盾在于**“朴素模式”未激活URL重写机制**,导致无法处理自定义路径。建议优先采用方案1或切换至支持重写的固定链接类型(如“文章名”)。若需保持朴素模式,需手动配置服务器规则或代码级重定向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值