Apache RewriteCond - 本地工作,不在主机上

时间:2014-08-08 12:29:18

标签: apache .htaccess mod-rewrite

我有一个.htaccess重写条件/规则,它在我的本地运行正常,这是OSX mavericks,运行apache Apache / 2.2.26,但当我部署到我的生产服务器它不再有效,运行Apache / 2.2 .22(Debian)。

这是条件:

RewriteCond %{REQUEST_URI} ^([a-z]{2})/sitemap.xml$
RewriteRule ^([a-z]{2})/sitemap.xml /sitemaps/$1_sitemap.xml [NC,L]

正如您所看到的,我在基本目录中有一个站点地图目录,这是一个多语言站点,我有一个每种语言的站点地图。但是,我不能简单地为每个目录创建一个类似/en/sitemap.xml的目录,因为这会影响框架处理请求的方式,因为apache会尝试为目录提供服务,而不是将其传递给要处理的索引文件。

所以我创建了这个重写条件,它应该将请求/en/sitemap.xml重写为/sitemaps/en_sitemap.xml,如上所述,这在本地工作得很好,但在我的Debian服务器上却没有,它从来没有匹配请求中的正则表达式,它只是移动到下一个并将请求传递给index.php文件..这是错误的!

任何建议/帮助都会很棒,我在apache docs中找不到这两个版本中可能不同的mod_rewrite。

由于

1 个答案:

答案 0 :(得分:1)

那是因为%{REQUEST_URI}值始终以前导斜杠开头 此外,由于您的RewriteRule也是如此,因此您的情况毫无用处。

此代码应在双方按预期工作

RewriteRule ^([a-z]{2})/sitemap\.xml$ /sitemaps/$1_sitemap.xml [L]