【问题标题】:HTTP 404 with Post name permalink带有帖子名称的 HTTP 404 永久链接
【发布时间】:2014-06-17 13:35:59
【问题描述】:

好的,我刚刚在这个网站上创建了第一页。当我使用默认的永久链接设置时它可以工作。

如果我将永久链接设置更改为使用帖子名称,则会收到 HTTP 404。

我不确定出了什么问题,或者我是否损坏了任何东西。谁能帮我解决?

网站托管在 apache 上。

【问题讨论】:

    标签: wordpress permalinks


    【解决方案1】:

    您使用的是 XAMPP 还是 MAMP?这些环境有几个常见的问题,取自 WordPress Codex:Fixing Permalink Problems

    XAMPP 用户 (Windows):某些版本的 XAMPP 不启用 mod_rewrite 默认情况下(尽管它是在 Apache 中编译的)。启用它 — 从而使 WordPress 能够编写所需的 .htaccess 文件 创建漂亮的永久链接——你必须打开 apache/conf/httpd.conf 和 取消注释行 LoadModule rewrite_module modules/mod_rewrite.so (即,删除行前的井号/井号)。

    WAMP 用户 (Windows):某些版本的 WAMP(所有版本?)不支持 默认情况下启用 mod_rewrite 或允许以下符号链接。启用 所需功能导航到 apache/conf/httpd.conf 文件,使用文本编辑器打开并取消注释 LoadModule 行 rewrite_module modules/mod_rewrite.so(即删除哈希/磅 在行前签名)。然后在同一个文件中进一步向下 有一个以“Options FollowSymlinks”行开头的部分。 将该部分中的第二行从“AllowOverride none”更改为 允许覆盖所有。保存编辑的 httpd.conf 并重新启动所有 WAMP 模块。您的固定链接现在应该可以使用了。

    如果您的沙盒没有可用的mod_rewrite,您可能还会看到Permalinks without mod_rewrite

    阿帕奇

    如果您使用的是 Apache,通常还有另外两个导致永久链接损坏的罪魁祸首:.htaccess 未生成(由于权限设置)或 Apache 的 AllowOverride 指令未启用。

    首先,如果您通过 SSH 连接到您的服务器,您是否会在根目录中看到生成的 .htaccess 文件?如果没有,WordPress 可能没有写入该文件的权限。也有可能文件 确实 存在,但 WordPress 无法编辑它。无论哪种情况,您都可以chmod 该文件(如果它不存在则创建它)到 666。

    接下来,确保您的 Apache 配置具有以下设置:

      <Directory />
        Options FollowSymLinks
        AllowOverride All
     </Directory>
    

    最后,通读 WordPress Codex 的 Fixing Permalink Problems 部分。关于为什么永久链接可能不起作用,还有其他一些提示和建议。

    【讨论】:

    • 这是托管在 apache 上的
    • @Ortund 对不起,我错过了。我更新了我的答案,希望对您有所帮助。
    • 你没有错过它,我认为它不言而喻,所以没有包含该信息。虽然现在添加了它
    • 好吧,.htaccess 应该在 WP 的根目录下还是在主题的根目录下?
    • @Ortund 它应该位于站点本身的根目录中(看起来您的站点根目录下运行着 WordPress)。它应该与第一个 WordPress index.php 文件处于同一级别。
    【解决方案2】:

    就我而言,首先我必须更新我网站根文件夹中的.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
    

    如果 WordPress 具有写入权限,它会自动执行此操作。否则它会抱怨它无法写入,并给出上面的代码示例,以便您可以手动更新.htaccess

    之后,我编辑了apache2.conf 文件。在Linux中,它驻留在/etc/apache2/apache2.conf,会有这样的部分:

    <Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    

    AllowOverride None 更改为AllowOverride FileInfo

    最后,执行以下命令:

    sudo a2enmod rewrite
    service apache2 restart
    

    为了工作,所有这些步骤都是必要的。

    【讨论】:

    • AllowOverride FileInfo 是我缺少的部分。
    【解决方案3】:

    在另一个网站上发现这篇文章已经帮助了很多人

    我终于设法解决了这个问题!解决方案:我使用的是自定义永久链接结构http://kyl.fi/%category%/%postname%/。我删除了尾部斜杠(即最后一个 /),瞧。但是,我很确定我之前使用了带有斜杠的永久链接结构没有任何问题,所以我仍然感到困惑,如果有人有解释,我很想听到更多关于这个问题的信息。

    所有标准的永久链接都有一个尾随 /。

    【讨论】:

      【解决方案4】:

      就我而言,我在我的 WordPress 安装中使用 NGINX 网络浏览器。解决方法是将以下代码 sn-p 添加到 NGINX 指令中:

      location / { try_files $uri $uri/ /index.php?$args; } # Add trailing slash to */wp-admin requests. rewrite /wp-admin$ $scheme://$host$uri/ permanent; location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ { expires max; log_not_found off; }

      如果您使用的是优秀的(开源)ISPconfig.org CPanel 替代品,请转到您的站点页面,在选项选项卡下,输入上述用于 NGINX 指令的代码 sn-p。 ISPconfig 有一个功能,可以在 Options 选项卡下添加常用代码 sn-ps 以便快速访问。

      完成上述修复后,我可以使用任何 WordPress 的永久链接选项。

      【讨论】:

        【解决方案5】:

        经过测试的工作解决方案:

        在您的 apache2 配置文件中,例如:

        /etc/apache2/sites-enabled/000-default.conf 或 mysite.conf 等 ..

        确保您已设置参数且不为空:ServerName www.example.com or 123.212.333.111

        还要确保您已设置如下目录规则(您的重写规则可能未在 .htaccess 中生效,因此您将其放在这里并尝试找出为什么 .htaccess 不起作用.htaccess not working apache):

        <Directory /var/www/html>
               Options Indexes FollowSymLinks MultiViews
               AllowOverride All
               Order allow,deny
               allow from all
        
               RewriteEngine On
               RewriteBase /
               RewriteRule ^index\.php$ - [L]
               RewriteCond %{REQUEST_FILENAME} !-f
               RewriteCond %{REQUEST_FILENAME} !-d
               RewriteRule . /index.php [L]
        </Directory>
        

        【讨论】:

          【解决方案6】:

          必须是2点检查: 1、在.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
          
          1. .htaccess 文件的权限,必须是:644

          【讨论】:

            【解决方案7】:

            在 centos 8 和 apache 2.4 中 查看 /etc/httpd/conf.d 在您的站点 .conf 文件中添加 AllowOverride All,例如这样

            <Directory /path/to/site>
                 #add the following setting to allow .htaccess in your web dir to work
                 AllowOverride All
            
            </Directory>
            

            我的 80 监听端口

                #Listen 80
            <VirtualHost *:80>
                DocumentRoot "/var/www/mysite.com"
                ServerName www.mysite.com
            
                # Other directives here
                
            
                    <Directory "/var/www/mysite.com">
                            Options FollowSymLinks
                            AllowOverride All
                    </Directory>
            RewriteEngine on
            RewriteCond %{SERVER_NAME} =www.mysite.com [OR]
            RewriteCond %{SERVER_NAME} =mysite.com
            RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
            </VirtualHost>
            

            我的 SSL 虚拟主机:

            <IfModule mod_ssl.c>
            <VirtualHost *:443>
                DocumentRoot "/var/www/mysite.com"
                ServerName www.mysite.com
            
                # Other directives here
                <Directory "/var/www/mysite.com">
                            Options FollowSymLinks
                            AllowOverride All
                    </Directory>
            ServerAlias mysite.com
            Include /etc/letsencrypt/options-ssl-apache.conf
            SSLCertificateFile /etc/mysite.com/fullchain.pem
            SSLCertificateKeyFile /live/mysite.com/privkey.pem
            </VirtualHost>
            </IfModule>
            

            重启apache服务。 检查您的 .htaccess(在我的站点中,.htaccess 位于 /var/www/mysite.com 我的.htaccess

            <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteBase /
            
            RewriteRule ^helloWorld/?$ /index.php [NC,L]
            RewriteRule ^index\.php$ - [L]
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule . /index.php [L]
            </IfModule>
            

            看helloWorld重写规则。 如果您调用 url www.mysite.com/helloWorld 并且浏览器显示您的主页,则配置正在运行并且站点的永久链接路径有效。

            【讨论】:

              【解决方案8】:

              我的解决方案是在 /etc/apache2/sites_available/000-default.conf 中添加此代码

              <Directory "/var/www/mysite.com">
                  Options FollowSymLinks
                  AllowOverride All
              </Directory>
              

              我使用的是 Apache 2.4.46 (Ubuntu) 谢谢

              【讨论】:

                猜你喜欢
                • 2018-04-23
                • 2012-04-06
                • 2015-03-07
                • 2013-08-03
                • 1970-01-01
                • 2015-08-22
                • 1970-01-01
                • 1970-01-01
                • 2017-06-06
                相关资源
                最近更新 更多