带有帖子名称永久链接的HTTP 404

时间:2014-06-17 13:35:59

标签: wordpress permalinks

好的,我只是在这个网站上创建了第一页。它在我使用默认永久链接设置时有效。

如果我更改永久链接设置以使用帖子名称,那么我会得到HTTP 404。

我不确定出了什么问题,或者我是否已经破坏了什么。任何人都可以帮我修复吗?

该网站托管在apache上。

Page exists, link is broken

8 个答案:

答案 0 :(得分:20)

您使用的是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或允许遵循SymLinks。启用   所需的功能导航到apache / conf / httpd.conf   文件,使用文本编辑器打开并取消注释LoadModule行   rewrite_module modules / mod_rewrite.so(即删除哈希/磅   在前面的标志)。然后在同一个文件中进一步向下   有一个部分以“Options FollowSymlinks”行开头。   将该部分中的第二行从“AllowOverride none”更改为   AllowOverride all。保存已编辑的httpd.conf并重启所有WAMP   模块。你的固定链接现在应该可以工作。

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

<强>的Apache

如果您正在使用Apache,通常会有两个其他罪魁祸首永久破坏:.htaccess未生成(因为权限设置)或Apache的AllowOverride指令未启用。

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

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

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

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

答案 1 :(得分:6)

在我的情况下,首先我必须更新我的网站根文件夹中的.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

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

答案 2 :(得分:1)

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

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

所有标准永久链接都有一个尾随/在那里。

答案 3 :(得分:0)

在我的情况下,我正在使用NGINX Web浏览器和我的WordPress安装。修复是将以下代码片段添加到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指令的代码段。 ISPconfig具有添加公共代码片段的功能,可以在“选项”选项卡下快速访问。

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

答案 4 :(得分:0)

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

例如,在您的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>

答案 5 :(得分:0)

必须进行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

答案 6 :(得分:0)

在 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 并且浏览器显示您的主页,则说明配置有效且站点的永久链接路径有效。

答案 7 :(得分:0)

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

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

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