可能这个错误有一个非常简单的解决方案,但我一直在寻找这种方法,但仍然没有得到错误。我想我已经尽力了。
问题:当我在我的 wordpress 安装中启用漂亮的永久链接时(因此,它使用 /%postname%/),它不起作用。除了主页,我在所有页面上都得到 404。
此页面http://codex.wordpress.org/Permalinks告诉我永久链接工作的要求:
- 安装了 mod_rewrite 模块的 Apache Web 服务器
- 在 WordPress 的主目录中,
- 启用 FollowSymLinks 选项
- 允许使用 FileInfo 指令(例如 AllowOverride FileInfo 或 AllowOverride All)
- 一个 .htaccess 文件(如果此文件丢失,WordPress 将在您激活“漂亮”永久链接时尝试创建它)
- 如果您希望 WordPress 自动更新 .htaccess 文件,WordPress 将需要对该文件的写入权限。
Apache Web 服务器已安装,mod_rewrite 模块已使用 a2enmod rewrite 命令加载(并且服务器已多次重新启动)。因此,在 /etc/apache2/mods-enabled 下,存在 rewrite.load 的符号链接。此外,当我运行 phpinfo 命令时,我看到 mod_rewrite 模块已加载。您也可以在这里查看:http: //namorti.com/phpinfo.php
然后,在 /etc/apache2/sites-enabled 中,没有“默认”存在。我将 000-default.conf 复制到默认值,然后编辑了默认值。它包含以下内容: DocumentRoot /var/www
<Directory />
Options FollowSymLinks Indexes
AllowOverride FileInfo
</Directory>
就我而言,FollowSymLinks 已启用,并且允许使用 FileInfo 指令。
至于最后两点,在我的 wordpress 主目录 (/var/www) 中,.htaccess 存在并且可由 Wordpress 写入(我更新了永久链接结构几次,它相应地更新了 .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
所以,据我所知,它应该可以工作。我重新启动了服务器(服务 apache2 重新启动)几次。我没有看到我错过了什么。有人在这里有线索吗?
提前致谢!
* 编辑 *
所以,我做了 calcinai 告诉我的事情……我编辑了我的 /etc/apache2/sites-enabled/default 文件(包含虚拟主机)。现在看起来像这样:
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin www.namorti.com
DocumentRoot /var/www
<Directory /var/www>
Options MultiViews
AllowOverride None
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>
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
我再次重新启动了 apache,但不幸的是它仍然无法正常工作。老实说,这会让我感到惊讶,因为如果 htaccess 本身可以工作,将指令从 .htaccess 文件移动到 vhost 就可以工作,因为其他一切对我来说似乎都足够正确......
还有其他建议吗?感谢您的努力!