42

我将永久链接结构更新为 /%postname%/ ,这更新了我的 .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

但我仍然在页面上收到 404 错误。我还需要更改其他设置吗?

编辑:如果它有助于 apache 日志似乎直接在永久链接文件夹中查找。IE:

[Wed Oct 16 11:12:32 2013] [error] [client xx.xx.xx.xxx] File does not exist: /var/www/exampledomain/news, referer: http://exampledomain.com/
4

11 回答 11

82

对于登陆此页面的其他人 - 另一个问题可能是(如果您使用 Apache 作为 Web 服务器)是您的 httpd.conf 或您的 sites-available/sitename.conf 文件需要编辑。

您的 Web 目录需要允许 .htaccess 文件覆盖其设置。

在文件中查找您的 Web 目录 - 它将位于 conf 文件的大部分中或被隔离到 VirtualHost 部分。

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

     #other settings ---

</Directory>

这将允许您在 WordPress 中根据需要设置 WordPress URL。

***已编辑 - 感谢 nietonfir 的更新。首先使用最少的权限。如果这不起作用,则替换AllowOverride FileInfoAllowOverride All

于 2013-10-30T20:08:11.090 回答
56

可能有多种因素阻止重写规则起作用。我的 ubuntu 服务器需要更改 3 件事才能使永久链接正常工作。

在较新版本的 apache2 中,您需要启用该模块:

sudo a2enmod rewrite
sudo service apache2 restart

您可能还需要修改 apache2.conf 文件。

sudo nano /etc/apache2/apache2.conf

将您的 Web 目录覆盖规则更改为AllowOverride All

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

之后,再次重新启动服务。

WordPress 安装目录中的 .htaccess 文件需要由网络服务器拥有或可读/可修改。

这可以通过将所有者更改为 www-data(通常是网络服务器用户)或更改权限来完成。

sudo chown www-data /var/www/wordpress-install/.htaccess 

或者

sudo chmod 664 /var/www/wordpress-install/.htaccess

登录到您的 Wordpress 管理后端并保存永久链接设置,它们应该可以正常工作。

于 2014-12-03T07:54:50.363 回答
31

现在已经解决了。我没有启用 mod_rewrite。所以我这样做了:

$ sudo a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  service apache2 restart
$ service apache2 restart
 * Restarting web server apache2                                                                              
于 2013-10-16T10:29:27.823 回答
12

你会想告诉 apache 跟随你的 .htaccess 文件。您可以通过编辑 apache.conf 文件来做到这一点

$sudo nano /etc/apache2/apache.conf

向下滚动到该行默认情况下它将是:

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

将 AllowOverride 的值更改为 All 所以现在它变为:

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

按 ctrl+x 并按 y 保存配置文件。为了对服务器进行此更改,首先启用 mod_rewrite by。

$ sudo a2enmod rewrite

然后重启服务器

$ sudo service apache2 restart

完毕!

资料来源:https ://www.wst.space/riddling-with-wordpress-permalink-setup-issues/

于 2018-05-30T11:58:28.053 回答
6

使用下面的 .htaccess 代码,只需将您的项目名称(位于 www 目录中)放在下面的代码中

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

# END WordPress

谢谢

于 2013-10-16T13:20:57.610 回答
1

要检查这是否描述了您的问题的另一件事:

  • htaccess 和 mod_rewrite 设置正确
  • 某些永久链接上的 404 错误,但其他永久链接上没有

确保在与您的 Wordpress 安装相同的文件夹中不存在名称与 Wordpress 永久链接匹配的现有 .php 文件或目录。

例如,如果您有以下 Wordpress 页面永久链接:

 example.com/name_one/
 example.com/name_two/

并且包含您的 Wordpress 安装的目录包括以下文件:

 name_one.php

那么这将是结果:

更重要的是,第二个 URL将给出 404 而不是运行 name_one.php,这意味着这个问题很难诊断,因为它可以给出与错误编写的 .htaccess 文件相同的症状。

于 2018-10-14T11:51:59.027 回答
1

我面临同样的问题,还有一件事要寻找。

以下是您需要为 wordpress 永久链接正常工作做的事情:

  1. 确保您对 wordpress 目录中的文件和文件夹具有正确的权限模式:
    sudo find . -type f -exec chmod 644 {} +
    sudo find . -type d -exec chmod 755 {} +

  2. 对于永久链接结构,请确保mode_rewrite在 apache 中启用:
    sudo a2enmod rewrite
    sudo service apache2 restart

于 2017-02-27T19:11:52.593 回答
0

如果您在 ubuntu 上设置新站点或克隆站点,请记住将站点配置文件符号链接/etc/apache2/sites-available/your-file.conf/etc/apache2/sites-enabled文件夹,以便 apache 加载它。


只需运行:sudo a2ensite your-file.conf,然后sudo service apache2 reload

sudo a2dissite your-file.conf删除符号链接,即禁用配置。

于 2015-01-10T18:01:53.047 回答
0

还有另一种可能性:我刚刚更新了我的 macOS,它总是搞砸Apache 配置文件。除其他外,我还必须重新启用该mod_rewrite模块。找到说,

#LoadModule rewrite_module libexec/apache2/mod_rewrite.so

并删除散列,所以它说,

LoadModule rewrite_module libexec/apache2/mod_rewrite.so
于 2017-12-15T00:20:51.467 回答
0

如果您使用的是 Apache,请仔细检查 VirtualHost 中的Directory中没有错误,如果您输入了错误的目录,Apache 不会警告您:

<Directory /var/www/html/site/wordpress>
  Options FollowSymLinks
  AllowOverride Limit Options FileInfo
  DirectoryIndex index.php
  Require all granted
</Directory>
<Directory /var/www/html/site/wordpress/wp-content>
  Options FollowSymLinks
  Require all granted
</Directory>
于 2022-01-12T19:54:09.113 回答
0

WAMP 用户(Windows):某些版本的 WAMP(所有版本?)默认情况下不启用 mod_rewrite 或允许遵循 SymLinks。要启用所需的功能,请导航到apache/conf/httpd.conf file,使用文本编辑器打开并取消注释LoadModule rewrite_module modules/mod_rewrite.so 行(即,删除行前的井号/井号)。然后在同一个文件的更下方,有一个以“ Options FollowSymlinks ”行开头的部分。将该部分的第二行从 " AllowOverride none" 更改为AllowOverride all. 保存编辑的 httpd.conf 并重新启动所有 WAMP 模块。您的固定链接现在应该可以工作了。

有关更多详细信息,请修复固定链接问题

于 2017-08-16T12:36:41.773 回答