好的,我只是在这个网站上创建了第一页。它在我使用默认永久链接设置时有效。
如果我更改永久链接设置以使用帖子名称,那么我会得到HTTP 404。
我不确定出了什么问题,或者我是否已经破坏了什么。任何人都可以帮我修复吗?
该网站托管在apache上。
答案 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
答案 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) 谢谢