仅页面上有404个永久链接错误

时间:2012-12-04 作者:RRikesh

我在使用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_arraypage_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)

2 个回复
最合适的回答,由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会触发你的页面请求。

SO网友:Anonymous Platypus

您应该告诉apache遵循您的。htaccess文件。您可以通过编辑apache来做到这一点。conf文件

$sudo nano /etc/apache2/apache.conf
默认情况下,向下滚动到该行:

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
将AllowOverride的值更改为All,使其现在变为:

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
按ctrl+x,然后按y保存配置文件。要对服务器进行此更改,请首先启用mod\\u rewrite by。

$ sudo a2enmod rewrite
然后重新启动服务器

$ sudo service apache2 restart
完成!

资料来源:https://www.wst.space/riddling-with-wordpress-permalink-setup-issues/

结束

相关推荐

widgetlogic and permalinks

我试图使用widgetlogic在某些页面上有条件地显示菜单。每个菜单都使用如下标记is_page(array(\"Page Name\", \"Page Name 2\" ...)), 在我尝试更改permalinks之前,它一直工作得很好(因此所有菜单都会从各自的页面中消失)。我做错什么了吗?是否有解决方法?