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

时间:2011-10-28 19:27:28

标签: php apache .htaccess mod-rewrite

好的,所以我一直在为其雇主在其他一个实时网站的子文件夹中开发一个网站。开发中的URL结构是http://our-live-site.net/our-dev-site.com/index.php。开发服务器在Windows上运行,我刚刚将其迁移到的新服务器是* nix Apache服务器。我不太确定这是否是一个问题,因为前面没有额外的目录,或者它们是如何解析.htaccess文件的Windows / Linux差异的。在对此事进行一些研究之后,我倾向于相信前者而不是后者。我的.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.php http://new-site.com/template.php?page=some-page。我还需要保留为我们的位置页面捕获另一个$_GET var的选项(它们使用不同的模板),因此在第一次重写后RewriteRule ^(.*).php template.php?location=$1 [NC][QSA]。我有一种感觉,我忽略了一些非常简单的东西,主要是因为...简单的规则。任何帮助都会受到赞赏,我相信这只是一个让人眼前一亮的问题。

1 个答案:

答案 0 :(得分:0)

尝试:

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

替换这两个RewriteRules

正在发生的事情是,当apache重写时,它会在内部重定向,并且重写的路径将通过所有规则传递回来,仅在重写的路径(不是查询字符串)与unrewritten路径相同时停止。