我在使用permalinks时遇到了一个奇怪的问题/%postname%/
结构
我可以使用pretty permalink访问我的自定义帖子类型localhost/cpu/<post-type>/<post-title>/
但我在页面上发现了404错误。页面的url为localhost/cpu/<page-title>/
我的.htaccess
文件(保存永久链接时自动生成):
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /cpu/
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /cpu/index.php [L]
</IfModule>
# END WordPress
我的WordPress(版本3.4.2)安装在一个名为
cpu
. 我对默认的permalink结构没有任何问题
url/?p=123
. 当我禁用所有插件时,问题并没有消失。
有什么可能的解决方案吗?
有没有办法调试正在发生的事情?
UPDATE:
根据Code Monkey的回答,我在函数中添加了以下内容。phpI将过滤器更改为
rewrite_rules_array
到
page_rewrite_rules
- 这个
WP_Rewrite Class reference 建议:
要筛选为页面生成的重写规则,请使用page\\u rewrite\\u规则。
下面是我添加的代码:
add_filter(\'page_rewrite_rules\', \'rewrite_rules_array_filter_debug\', 10000);
function rewrite_rules_array_filter_debug($rules){
echo \'<pre>\';
var_dump($rules);
echo \'</pre>\';
return $rules;
}
以及保存后永久链接的输出
wp-admin/options-permalink.php
:
array(11) {
[".?.+?/attachment/([^/]+)/?$"]=>
string(32) "index.php?attachment=$matches[1]"
[".?.+?/attachment/([^/]+)/trackback/?$"]=>
string(37) "index.php?attachment=$matches[1]&tb=1"
[".?.+?/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$"]=>
string(49) "index.php?attachment=$matches[1]&feed=$matches[2]"
[".?.+?/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$"]=>
string(49) "index.php?attachment=$matches[1]&feed=$matches[2]"
[".?.+?/attachment/([^/]+)/comment-page-([0-9]{1,})/?$"]=>
string(50) "index.php?attachment=$matches[1]&cpage=$matches[2]"
["(.?.+?)/trackback/?$"]=>
string(35) "index.php?pagename=$matches[1]&tb=1"
["(.?.+?)/feed/(feed|rdf|rss|rss2|atom)/?$"]=>
string(47) "index.php?pagename=$matches[1]&feed=$matches[2]"
["(.?.+?)/(feed|rdf|rss|rss2|atom)/?$"]=>
string(47) "index.php?pagename=$matches[1]&feed=$matches[2]"
["(.?.+?)/page/?([0-9]{1,})/?$"]=>
string(48) "index.php?pagename=$matches[1]&paged=$matches[2]"
["(.?.+?)/comment-page-([0-9]{1,})/?$"]=>
string(48) "index.php?pagename=$matches[1]&cpage=$matches[2]"
["(.?.+?)(/[0-9]+)?/?$"]=>
string(47) "index.php?pagename=$matches[1]&page=$matches[2]"
}
有什么问题吗?
UPDATE 2:
使用时发现错误
var_dump($wp);
.
我得到了这样的回应:
["query_string"]=>
string(25) "statut-membre=sample-page"
["request"]=>
string(11) "sample-page"
["matched_rule"]=>
string(10) "([^/]+)/?$"
["matched_query"]=>
string(25) "statut-membre=sample-page"
["did_permalink"]=>
bool(true)
Wordpress正在查询一个名为
statut-membre
在查找我的页面时。我注意到我有一个空的重写段塞(
\'rewrite\' => array(\'slug\' => \'\'),
) 因为
register_taxonomy
作用我添加了一个slug并重新保存了我的permalink结构,现在我可以访问我的页面了。
现在查询看起来也很好:
["query_string"]=>
string(20) "pagename=sample-page"
["request"]=>
string(11) "sample-page"
["matched_rule"]=>
string(20) "(.?.+?)(/[0-9]+)?/?$"
["matched_query"]=>
string(26) "pagename=sample-page&page="
["did_permalink"]=>
bool(true)
最合适的回答,由SO网友:Oleg Butuzov 整理而成
你能试着更换吗
RewriteRule . /cpu/index.php [L]
根据
RewriteRule . /index.php [L]
至于调试的方法。。。
您总是可以var\\u转储一个$wp\\u查询对象,以了解哪些变量没有传递给wp。(您可以放置)到标题的第一行。php模板。
我相信下一步将是调试重写,在这种情况下,有用的过滤器是rewrites_array_rules 您可以在下一步中使用它进行调试
add_filter(\'rewrite_rules_array\', \'rewrite_rules_array_filter_debug\', 10000);
function rewrite_rules_array_filter_debug($rules){
var_dump($rules);
return $rules;
}
将此添加到标题php
<?php
global $wp;
echo \'<pre>\';
var_dump($wp);
echo \'</pre>\';
?>
这应该给你一个点,重写rulle会触发你的页面请求。