在Ubuntu 14.04上启用mod_rewrite Apache 2.4

时间:2015-12-31 23:30:08

标签: apache .htaccess ubuntu mod-rewrite

所以我已经完成了关于这个主题的大部分问题,但我似乎仍有问题。我似乎无法使用htaccess重写任何网址。

详细信息:使用Apache 2.4和Ubuntu 14.04 我确实启用了mod_rewrite,可以通过以下两条信息看到:

$: apachectl -M
Loaded Modules:
 ....
 rewrite_module (shared)
 ....
$: ls /etc/apache2/mods-enabled/
.... rewrite.load ....

我尝试使用以下三种方法重启apache:

$: service apache2 restart
$: apachectl restart
$: apachectl graceful

没有任何工作。为了完全测试,我在/etc/apache2/apache2.conf中添加了一个日志级别,如下所示:

LogLevel notice rewrite:trace8

如果我理解正确意味着几乎所有关于重写的信息都应该转到我的错误日志,但是我没有得到任何日志信息。

最后,我的.htaccess中的重写部分如下:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www2.%{HTTP_HOST}/$1 [L,R=301]

我把www2而不是www,因为出于某种原因,它已经将website.com重定向到www.website.com,所以我想知道它是否是自动浏览器的#ie正在做。奇怪的是,它还会自动将website.com/index.php更改为www.website.com

是否有任何可能导致此问题的遗漏?它似乎重写了某些内容(或者它是浏览器正在做的事情),但当我尝试将其重写为错误的网址以使其失败时,它不会失败而是转到正确的网址。

有什么想法吗?

修改 忘了包含它,我的目录中有以下内容:

<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

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

所以我确实将AllowOverride设置为All以获取所有内容的目录。

1 个答案:

答案 0 :(得分:-2)

我假设您要强制www网址。

现在,如果您只使用一个域(即:example.com),请尝试:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

如果您有多个域名,请尝试:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^\.]+\.[^\.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]

请注意,这个与第三个(或更多)级域不匹配。要解决这些问题,请考虑使用RewriteCond %{HTTP_HOST} !^www\.,但请再次注意子域案例。

另请注意RewriteRule中的QSA标志,您可能需要添加它。