【问题标题】:change permalinks to 'Postname' cause Page Not Found将永久链接更改为“Postname”导致找不到页面
【发布时间】:2026-01-14 00:55:01
【问题描述】:

我有一个 queryfetch 所有来自自定义帖子类型 device 的帖子,我想每页显示 3 个帖子。使用nextprevious 链接,我可以导航到另外3 个帖子可以看到的下一页。它与默认的 permalink 完美配合,即

  //the default permalink of wordpress
http:mywebsite/?p=123

我需要将其更改为 Post name 用于 SEO 目的,如下所示:

http:mywebsite/sample-post/

然后突然出现问题。

我搜索并阅读了更多博客/文章,但找不到任何有用的建议。我被这个问题困住了,这让我很头疼。

顺便说一句,我使用了这个查询:

   <?php
     if (have_posts()) : {
     $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
     query_posts('showposts=3&post_type=advice'.'&paged='.$paged);} ?>

      <ul class="adviceLandingPage">

      <?php while(have_posts()) : the_post(); ?>

       <li>
         <span><?php the_title(); ?></span>
         <span><?php $excerpt = get_the_excerpt(); echo string_limit_words($excerpt,20); ?></span>

       </li>

       <?php endwhile; ?>
          <li class="navigation">
             <?php posts_nav_link(); ?>
          </li>
       </u>
     <?php endif; ?>

感谢您的任何建议。

编辑:

当我导航到下一页时,我假设会看到接下来的 3 个帖子,这是错误 Page not found

这是将永久链接更改为 %postname% 后的 .htaccess

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

# END WordPress

【问题讨论】:

  • 您能否提供更多信息,例如发生的错误是什么,或者您能否发布指向该网站的链接以便我们查看问题?
  • 当我浏览下一页时,错误是这个page not found
  • 我们真的没有足够的时间继续下去。问题似乎与循环无关,因此包含的代码无济于事。一些有助于解决问题的想法 - 导航中是否生成了正确的 url?您使用的是自定义主题吗?
  • 只有当我将永久链接更改为Post name 但我使用默认永久链接时才会出现问题,导航到下一页没有问题。
  • 想要解决这个问题非常困难,一个 WP 网站有很多因素。此链接可能会有所帮助theme-fusion.com/knowledgebase/…

标签: php apache .htaccess wordpress


【解决方案1】:

我在使用 LetsEncrypt 证书更新到 https/SSL 后遇到了这种情况。

以下 URL 中的说明是有效的,但是我必须使用“AllowOverride All”更新 ssl conf 文件,而不是更新 000-default.conf。

/etc/apache2/sites-available/domainname-le-ssl.conf

https://sachinparmarblog.com/fixing-permalinks-on-wordpress-to-use-postname/

【讨论】:

  • 这与我的 Let's Encrypt 证书问题类似。在目录覆盖中,它的路径为 /var/www/wordpress,显然它必须切换到 /var/www/mydomainname/ 才能正常工作。
【解决方案2】:

我在Settings-&gt; Permalinks 中解决了这个问题,检查Post name 并复制.htacces 的内容,保存时显示。访问虚拟主机并修改.htaccess并粘贴内容并保存

【讨论】:

    【解决方案3】:

    当我没有授予对 .htaccess 文件的写访问权限时,就会发生这种情况。更改 .htaccess 文件的权限解决了我的问题

    【讨论】:

      【解决方案4】:

      运行以下命令

      注意:$ 不是命令的一部分

      $ sudo a2enmod rewrite
      
      $ cd /var/www/html
      
      $ ls -al
      
      $ sudo touch .htaccess
      
      $ sudo nano .htaccess
      

      修改您的 .htaccess 文件以查看上面的 sn-p

      # 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
      

      $ sudo chmod 644 .htaccess
      
      $ sudo nano /etc/apache2/sites-available/000-default.conf
      

      确保 AllowOverride All 已设置

      <Directory "/var/www/html">
          AllowOverride All
      </Directory>
      

      $ sudo /etc/init.d/apache2 restart
      

      有关更多信息,请参阅下面的链接。

      https://sachinparmarblog.com/fixing-permalinks-on-wordpress-to-use-postname/

      【讨论】:

        【解决方案5】:

        如果您使用的是 nginx,并且想要将 wordpress 永久链接从普通链接更改为帖子名称,只需将以下行添加到 nginx 文件中

        location / {
          try_files $uri $uri/ /index.php?q=$uri&$args;
        }
        

        如果您的 wordpress 安装在特定文件夹 example /blog 中,请添加此

        location / {
          try_files $uri $uri/ /blog/index.php?q=$uri&$args;
        } 
        

        【讨论】:

          【解决方案6】:

          同时检查httpd.conf 文件并确保AllowOverrideAll 用于保存.htaccess 文件的目录

          【讨论】:

            【解决方案7】:

            我找到了解决办法。

            进入 WordPress 管理仪表板,转到:

            “设置”>“永久链接”>“常用设置”,并将单选按钮设置为“自定义结构”

            ,然后粘贴到文本框中:

            /index.php/%year%/%monthnum%/%day%/%postname%/

            ,然后单击“保存”按钮。

            【讨论】:

            • 这对我有用,但我不明白它为什么有效或问题是什么。
            【解决方案8】:

            要解决此问题,请执行以下步骤:

            1. 在 Web 服务器上找到 httpd.conf 文件
            2. 查找代码LoadModule rewrite_module modules / mod_rewrite.so
            3. 删除前面的#
            4. 找到代码AllowOverride none并转换为AllowOverride all

            它就像美味一样简单:)

            【讨论】:

            • 是的,这就是想法,但是使用 apache2 的过程是:创建 simlink/etc/apache2/mods-enabled/rewrite.load -&gt; ../mods-available/rewrite.load 然后编辑 /etc/apache2/apache2.conf 并将 AllowOverride none 更改为 AllowOverride all
            【解决方案9】:

            不确定您是否已经解决了这个问题,但通常您需要做的就是刷新数据库,登录到您的站点并转到永久链接,然后进行更改并保存它,如果这没有帮助

            阅读: http://codex.wordpress.org/Using_Permalinks

            【讨论】: