我有一个.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。
由于
答案 0 :(得分:1)
那是因为%{REQUEST_URI}
值始终以前导斜杠开头
此外,由于您的RewriteRule
也是如此,因此您的情况毫无用处。
此代码应在双方按预期工作
RewriteRule ^([a-z]{2})/sitemap\.xml$ /sitemaps/$1_sitemap.xml [L]