【发布时间】:2014-06-17 13:35:59
【问题描述】:
好的,我刚刚在这个网站上创建了第一页。当我使用默认的永久链接设置时它可以工作。
如果我将永久链接设置更改为使用帖子名称,则会收到 HTTP 404。
我不确定出了什么问题,或者我是否损坏了任何东西。谁能帮我解决?
网站托管在 apache 上。
【问题讨论】:
标签: wordpress permalinks
好的,我刚刚在这个网站上创建了第一页。当我使用默认的永久链接设置时它可以工作。
如果我将永久链接设置更改为使用帖子名称,则会收到 HTTP 404。
我不确定出了什么问题,或者我是否损坏了任何东西。谁能帮我解决?
网站托管在 apache 上。
【问题讨论】:
标签: wordpress permalinks
您使用的是 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 部分。关于为什么永久链接可能不起作用,还有其他一些提示和建议。
【讨论】:
index.php 文件处于同一级别。
就我而言,首先我必须更新我网站根文件夹中的.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 是我缺少的部分。
在另一个网站上发现这篇文章已经帮助了很多人
我终于设法解决了这个问题!解决方案:我使用的是自定义永久链接结构http://kyl.fi/%category%/%postname%/。我删除了尾部斜杠(即最后一个 /),瞧。但是,我很确定我之前使用了带有斜杠的永久链接结构没有任何问题,所以我仍然感到困惑,如果有人有解释,我很想听到更多关于这个问题的信息。
所有标准的永久链接都有一个尾随 /。
【讨论】:
就我而言,我在我的 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 的永久链接选项。
【讨论】:
经过测试的工作解决方案:
在您的 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>
【讨论】:
必须是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
【讨论】:
在 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 并且浏览器显示您的主页,则配置正在运行并且站点的永久链接路径有效。
【讨论】:
我的解决方案是在 /etc/apache2/sites_available/000-default.conf 中添加此代码
<Directory "/var/www/mysite.com">
Options FollowSymLinks
AllowOverride All
</Directory>
我使用的是 Apache 2.4.46 (Ubuntu) 谢谢
【讨论】: