Wordpress add_rewrite_rule无效

时间:2017-07-04 00:03:52

标签: wordpress redirect

这可能看起来像一个重复的问题,但我已经阅读了很多具有类似头衔的SO帖子,而且每个帖子都比我能够做得更远,所以看来我似乎必须做一些基本的错误,但我不知道它是什么。那就是说,这就是我的问题:

我按照'基本用法'中的步骤操作。 add_rewrite_rule documentation page的一部分,确保刷新并重新生成重写规则。

我有一个ID为68的网页,我想重定向一下:

http://localhost.test.wordpress/leaf/68

到此:

http://localhost.test.wordpress/index.php?page_id=68

我已经确认后者确实存在,并且我可以直接导航到它。

所以在我的主题functions.php文件中,我写了以下内容:

function custom_rewrite_basic() { add_rewrite_rule('^leaf/([0-9]+)/?', 'index.php?page_id=$matches[1]', 'top'); } add_action('init', 'custom_rewrite_basic');

然后我去了设置 - >我的WP管理面板的固定链接部分,然后点击“保存更改”#39;没有任何变化,因为文档页面指示我这样做。

我遇到的问题是,当我导航到http://localhost.test.wordpress/leaf/68时,我收到404错误。很明显,文档表明这不应该发生,并且我所看到的其他SO帖子都没有遇到过这个问题(他们已经过了这一步并且在重定向的其他方面遇到了困难)。

我在functions.php中添加的重定向代码是来自文档页面的精确复制/粘贴,但由于404,我认为根本没有运行WP代码。你能让我知道我做错了什么吗?我对WP来说是全新的。

2 个答案:

答案 0 :(得分:2)

根据评论中的补充答案,您的.htaccess听起来并没有正确设置(获取服务器404页而不是WP 404)。将以下内容添加到.htaccess文件中:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

这会将(几乎)每个请求重定向到index.php,由WP内部处理。这需要为rewrite rules to be processed by WP正确设置。

答案 1 :(得分:2)

如果网站似乎不尊重您对.htaccess文件所做的更改,则应确保<VirtualHost>配置明确授予.htaccess文件权限以覆盖某些配置。

<VirtualHost>条目中,也应该有一个<Directory>条目。您需要向其添加AllowOverride All命令,如下所示:

<Directory /path/to/your/web/document/root>
        AllowOverride All
        Require all granted
</Directory>

此外,如果网站不遵守您的Rewrite命令,则应确保检查httpd.conf以查看是否已加载mod_rewrite模块。寻找类似于这样的一行:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

如果用#注释掉,则取消注释该行(删除#),然后重启你的apache。