为什么不在Linux上运行.htaccess规则(ubuntu 14.04)

我已经从运行WAMP的Windows机器上复制了一个站点到一个带有标准LAMP栈的Linux机器上。

除了.htaccess中的规则之外,一切工作都很好。 我已经确认.htaccess正在testing一个简单的规则,所以我知道它与Apacheconfiguration无关。 这些规则在我的Windows机器上工作得非常好。

这里是我的.htaccess文件规则的一个副本。

RewriteRule ^admin/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/$ index.php?admin=1&class=$1&id=$2&method=$3 [L,QSA] RewriteRule ^admin/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/$ index.php?admin=1&class=$1&method=$2 [L,QSA] RewriteRule ^(.*)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/$ index.php?class=$1&id=$2&method=$3 [L,QSA] RewriteRule ^admin/([A-Za-z0-9-]+)/$ index.php?admin=1&class=$1 [L,QSA] RewriteRule ^(.*)/([A-Za-z0-9-]+)/$ index.php?class=$1&method=$2 [L,QSA] RewriteRule ^download/([A-Za-z0-9-]+.*) index.php?class=downloads&method=download&target=$1 [L,QSA] RewriteRule ^stream/([A-Za-z0-9-+]+.*) index.php?class=downloads&method=download&target=$1 [L,QSA] RewriteRule ^(.*)/$ index.php?class=$1 [L,QSA] 

有什么理由为什么这些不会在Linux上工作。

编辑:

我请求的URL是http://domain.com/access所以我创build了这个规则RewriteRule access index.php?class=access它的工作。

我要求的url是http://example.com/access

你发布的规则都不符合这样的要求。 最后一条规则需要一个尾部的斜杠,所以http://example.com/access/ (带有斜线)应该可以正常工作。

要使尾部斜线可选 ,可以将最后一条规则更改为:

 RewriteRule ^(.*)/?$ index.php?class=$1 [L,QSA] 

请注意, RewriteRule 模式只是从^(.*)/$改为^(.*)/?$ – 使前面的字符/组可选。 如果完全不需要结尾斜杠,则将其删除。

默认情况下,apache禁用了AllowOverride ,你需要在文件/etc/apache2/apache2.conf中编辑apacheconfiguration来启用

 <Directory / var / www />
        选项索引FollowSymLinks
         AllowOverride无

并将AllowOverride None更改为AllowOverride All

或者添加到虚拟主机configuration文件

 <Directory / path / to / virtualhost / site>
   AllowOverride全部
 </目录>

你也需要启用重写mod,如果你还没有启用

  a2enmod重写