11

可能这个错误有一个非常简单的解决方案,但我一直在寻找这种方法,但仍然没有得到错误。我想我已经尽力了。

问题:当我在我的 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 就可以工作,因为其他一切对我来说似乎都足够正确......

还有其他建议吗?感谢您的努力!

4

5 回答 5

15

确保该AllowOverrides指令all虚拟主机中设置为- 这就是告诉 apache.htaccess在 webroot 中查找文件的原因。

更好的解决方案实际上是将您的重写指令放在虚拟主机中,因为您显然对文件具有写入权限。当您启用 AllowOverrides 时,apache 将在每个请求的目录和所有父目录中查找 .htaccess 文件,这可能会对性能造成很大影响。

对于 Wordpress,您的虚拟主机应如下所示:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/site

    <Directory /var/www/site> 
        Options Indexes FollowSymLinks
        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> 
</VirtualHost>
于 2013-09-12T21:54:42.463 回答
6

自己解决了。

它与文件“000-default.conf”有关 - 我将其复制到“默认”并编辑了“默认”,就像我在问题中已经提到的那样。

显然,该服务本身正在使用文件“000-default.conf”。通过将“默认”文件复制回“000-default.conf”并重新启动 apache 服务,现在一切正常。

一个警告:calcinai 的建议似乎应该可行,但是根据他在我的虚拟主机中正确的“000-default.conf”文件中的建议,我收到了 403 Forbidden 错误。当我用我的原始内容替换他的内容时

DocumentRoot /var/www
<Directory />
        Options FollowSymLinks Indexes
        AllowOverride FileInfo
</Directory>

然后再次重新启动apache服务,一切正常。

感谢 calcinai 努力帮助我 :)

于 2013-09-13T09:25:53.790 回答
5

固定链接问题

在这个文件里面,我们想要改变所有的东西。

sudo nano /etc/apache2/sites-available/000-default.conf
000-default.conf 

- 应该是这样的:

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    <Directory /var/www/html/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

如果您没有看到这样的内容,请将上面的代码粘贴到虚拟主机中

完成后,保存并关闭文件。

接下来,我们需要启用重写模块,它允许您修改 URL。您可以通过键入以下内容来执行此操作:

sudo a2enmod rewrite

进行这些更改后,重新启动 Apache:

sudo service apache2 restart
于 2018-06-07T07:21:23.710 回答
0

这可以帮助您解决这个问题:

sudo chown -R www-data:www-data /var/www
于 2017-07-15T01:27:48.700 回答
0

在花了很多时间之后,这就是在我的 Linux 机器的 LAMP 服务器上成功运行的方法。我需要进行以下更改才能使其完美运行,

  1. 将此添加到您的/etc/hosts文件中。

    127.0.0.1   sitename.com
    
  2. 在路径中添加主机条目如下/etc/apache2/sites-available/sitename.com.conf

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName sitename.com
    
        DocumentRoot /var/www/sitename.com/public_html
        <Directory />
            Options FollowSymLinks
            AllowOverride None
        </Directory>
        <Directory /var/www/sitename.com/public_html>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
        </Directory>
    
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    
  3. 创建指向已启用站点的符号链接。

    sudo ln -s /etc/apache2/sites-available/sitename.com.conf /etc/apache2/sites-enabled/sitename.com.conf
    
  4. 使用命令重启apache,

    sudo service apache2 restart
    

这对我来说非常有效。添加主机条目的说明来自https://www.digitalocean.com/community/questions/wordpress-permalinks-not-working-on-ubuntu-14-04

于 2017-08-09T20:11:55.330 回答