在Wordpress上启用漂亮的永久链接 - apache配置不起作用


Enabling pretty permalinks on Wordpress - apache configuration does not work

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

问题:当我在我的wordpress安装上启用漂亮的永久链接时(因此,它正在使用/%postname%/),它不起作用。除主页外,我在所有页面上都得到 404。

这个页面 http://codex.wordpress.org/Permalinks 告诉我永久链接工作的要求:

  • 安装了mod_rewrite模块的 Apache Web 服务器
  • 在WordPress的主目录中,
    • 已启用"关注符号链接"选项
    • 允许的 FileInfo 指令(例如 AllowOverride FileInfo 或 AllowOverride All)
    • 一个.htaccess文件(如果缺少此文件,WordPress将在您激活"漂亮"永久链接时尝试创建它)
    • 如果您希望WordPress自动更新.htaccess文件,WordPress将需要对文件的写入权限。

已安装 Apache Web 服务器,mod_rewrite 模块已加载 a2enmod 重写命令(之后服务器已多次重新启动)。因此,在/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写入(我更新了permalink结构几次,并相应地更新了.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重新启动)。我看不到我错过了什么。有人在这里有线索吗?

提前感谢!

*编辑*

所以,我做了卡尔奇奈告诉我要做的事情......我编辑了我的/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 就会起作用,因为其他一切对我来说似乎都足够正确......

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

确保 AllowOverrides 指令设置为 allvhost 中 - 这就是告诉 Apache 在 webroot 中查找.htaccess文件的原因。

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

对于Wordpress,你的vhost应该看起来像这样:

<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>

自己解决了。

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

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

一个警告:calcinai 的建议似乎应该有效,但是在他的 vhost 中的正确"000-default.conf"文件中的建议,我得到了一个 403 禁止错误。当我用原始内容替换他的内容时

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

然后再次重新启动 apache 服务,一切都奏效了。

感谢calcinai努力帮助我:)

永久链接问题

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

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

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

sudo chown -R www-data:www-data /var/www

在花费了大量时间之后,以下是在我的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