为什么 .htaccess 规则在 Linux(ubuntu 14.04)上不起作用

为什么 .htaccess 规则在 Linux(ubuntu 14.04)上不起作用

我已将站点从运行 WAMP 的 Windows 机器复制到具有标准 LAMP 堆栈的 Linux 机器。

除了 .htaccess 中的规则外,其他一切都运行正常。我已通过测试一条简单规则确认 .htaccess 正常运行,因此我知道这与 apache 配置无关。这些规则在我的 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因此我创建了这个RewriteRule access index.php?class=access有效的规则。

答案1

我请求的 URL 是http://example.com/access...

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

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

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

注意RewriteRule 图案只需从 改为^(.*)/$-^(.*)/?$使?前面的字符/组成为可选的。如果根本不需要尾部斜杠,则将其删除。

答案2

默认情况下,apache 已AllowOverride禁用,您需要在文件 /etc/apache2/apache2.conf 中编辑 apache 配置以启用

寻找

<目录 /var/www/>
        期权指数 FollowSymLinks
        AllowOverride 无

并更改AllowOverride NoneAllowOverride All

或者添加到虚拟主机配置文件

<目录 /path/to/virtualhost/site>
  允许覆盖全部
</目录>

如果你还没有启用重写模式,那么你需要启用它

a2enmod 重写

相关内容