从Windows服务器迁移后,.htaccess重写不工作


.htaccess rewrites not working after migration from Windows server

好的,所以我一直在为我的雇主开发一个网站,在他们的另一个网站的子文件夹中。开发中的URL结构为http://our-live-site.net/our-dev-site.com/index.php。开发服务器运行在Windows上,我刚刚迁移到的新服务器是*nix Apache服务器。我不太确定这是否是一个问题,没有额外的目录在前面,或者如果它是一个Windows/Linux的差异,他们如何解析。htaccess文件。在对这个问题做了一些研究之后,我倾向于相信前者而不是后者。我的。htaccess文件中只有3条规则,我已经将问题隔离到最后两条,即重写。

    <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteRule ^(inc/ajax|inc/pages|js|fonts|moving-tips)($|/) - [L]
->    RewriteRule ^(.*).php template.php?page=$1 [NC]
->    RewriteRule ^(.*).php template.php?location=$1 [NC][QSA]
    </IfModule>

我需要做的是传递所有请求说http://new-site.com/some-page.phphttp://new-site.com/template.php?page=some-page。我还需要为我们的位置页面保留捕获另一个$_GET变量的选项(它们使用不同的模板),因此在第一次重写之后使用RewriteRule ^(.*).php template.php?location=$1 [NC][QSA]。我有一种感觉,我忽略了一些非常简单的东西,主要是因为……规则很简单。任何帮助都将是非常感激的,我相信这只是一个新视角的问题。

尝试:

RewriteCond %{REQUEST_URI}   !^/template.php
RewriteRule ^(.*).php template.php?page=$1&location=$1    [NC,L]

替换这两个rewriterrules

发生的事情是,当apache重写时,它在内部重定向,重写的路径通过所有规则被传递回,只有当重写的路径(不是查询字符串)与未重写的路径相同时才停止。