【问题标题】:URL rewrite not working, a2enmod active, using Override All, .htaccess correctURL 重写不起作用,a2enmod 处于活动状态,使用 Override All,.htaccess 正确
【发布时间】:2016-05-17 05:33:25
【问题描述】:

问题

我已经安装了一个 Wordpress。我打开了漂亮的永久链接(帖子名称)。主页以外的任何页面都是404 Not Found。这似乎表明存在重写问题。

我的设置

乌布努图 14.04 使用 localhost 作为我的 URL 我的 apache 配置是 /etc/apache2/sites-available/000-default.conf 我的wordpress位于/var/www/wordpress/ 我的相关htaccess位于/var/www/wordpress/.htaccess

我的尝试

当我运行 a2enmod rewrite 时,我得到了

Module rewrite already enabled

我的.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

我的000-default.conf 文件 apache 配置

<Directory /var/www/wordpress/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

我已经尝试了规范问题的所有答案。

How to enable mod_rewrite for Apache 2.2

我的问题

为什么我的重写不起作用?

【问题讨论】:

  • 你的 Apache 版本也是 2.2 吗?
  • 检查 apache2ctl -t -D DUMP_MODULESapache2ctl -t -D DUMP_VHOSTS ,另请参阅您的日志文件。为您的问题添加相关输出。

标签: php wordpress apache .htaccess mod-rewrite


【解决方案1】:

检查正确的虚拟主机配置的步骤: 检查您的“sites-available”目录中是否有“vhostname.conf”文件。然后检查“启用站点”目录中是否有指向该文件的有效符号链接。您可以通过a2ensite vhostname 创建缺少的站点符号链接。在编辑器中打开此文件。它应该包含类似

<VirtualHost *:80>
    ServerAdmin webmaster@sitename.net
    ServerName  sitename.net
    ServerAlias www.site-name.net

    DocumentRoot /var/www/site-folder/htdocs

    <Directory /var/www/site-folder/htdocs/>
            Options Indexes FollowSymLinks MultiViews
            DirectoryIndex index.php7 index.php5 index.php index.html
            AllowOverride All

# apache 2.2 and below only (following 3 lines)
            Order allow,deny
            Allow from all
            Deny from none

# apache 2.4 only
            Require all granted  
    </Directory>

确保DocumentRoot 文件夹具有匹配的&lt;Directory /path/to/docroot&gt; 块。放入此块 AllowOverride All 或您希望允许在“.htaccess”中覆盖的任何选择性权限。

确保启用了重写模块。

sudo a2enmod rewrite

修改配置后不要忘记重启/重新加载apache。

sudo apache2ctl graceful

检查模块和虚拟主机配置是否已加载。

apache2ctl -t -D DUMP_VHOSTS
apache2ctl -t -D DUMP_MODULES

【讨论】:

    【解决方案2】:

    我发现我需要在/etc/apache2/apache2.conf 编辑apache 配置并将/var/www/ 目录更改为AllowOverride All

    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
    

    我原以为我的 000-default.conf 会覆盖这个,但事实并非如此,这解决了问题。

    【讨论】:

    • 我的 apache2.conf 在 //var/www 上设置为 None 并且重写工作正常。
    • @Quasimodo'sclone 同意这是出乎意料的,但是它为我解决了这个问题,我没有在 StackOverflow 上看到这个问题的答案,所以这可能对其他人有帮助。
    • 此答案已发布在您已链接的question 上(37 个赞)。它似乎可以解决配置问题,但是,这是一种奇怪的行为(没有就无法工作),我不希望在生产系统上进行这样的设置。
    • @Quasimodo'sclone 该答案指示编辑/etc/apache2/sites-enabled/000-deafult,我已经尝试过但未成功。我同意这并不理想,不,它不会用于生产。如果您能找到更直接的解决方案,我会接受。
    • 你能发布你完整的 000-default.conf 吗?您是否启用了此站点配置?启用站点中是否有符号链接?
    猜你喜欢
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    相关资源
    最近更新 更多