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