我已经从运行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重写