我已将站点从运行 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 None
为AllowOverride All
或者添加到虚拟主机配置文件
<目录 /path/to/virtualhost/site> 允许覆盖全部 </目录>
如果你还没有启用重写模式,那么你需要启用它
a2enmod 重写