这可能看起来像一个重复的问题,但我已经阅读了很多具有类似头衔的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来说是全新的。
答案 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。