我有一个。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文档中提到的mod_rewrite在这两个版本,可能是不同的
谢谢
这是因为%{REQUEST_URI}
值总是以斜杠开头。
此外,你的条件是无用的,因为你的RewriteRule
做同样的。
这段代码应该在两边都能正常工作
RewriteRule ^([a-z]{2})/sitemap.xml$ /sitemaps/$1_sitemap.xml [L]