使用.htaccess将/sitemap.xml重定向到/index.php/sitemap/

时间:2013-05-07 02:03:16

标签: .htaccess codeigniter mod-rewrite

我正在使用codeigniter生成包含XML数据的页面。该文件的URL位于/index.php/sitemap,但我希望通过/sitemap.xml访问该URL

我的.htaccess文件已经过修改,允许用户访问网址而无需在网址前输入/index.php/。这是我正在使用的.htacess文件:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

RewriteRule ^sitemap\.xml$ index.php/sitemap [L]

除了重定向sitemap.xml文件外,一切正常。我在运行XAMPP的Windows机器上

我做错了什么?

3 个答案:

答案 0 :(得分:2)

跳过.htaccess修改并改为使用普通路线。

$route['sitemap\.xml'] = 'sitemap';

答案 1 :(得分:0)

RewriteRule ^.*sitemap\.xml$ index.php/sitemap [L]
RewriteRule ^(.*)$ /index.php/$1 [L]

您在到达站点地图之前进行匹配,因此它始终会重定向到index.php

这是user guide

中的示例
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^.*/(.*)$ /index.php/$1 [L]

您可以在标准index.php重写

之前将检查站点地图推到那里
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^.*/sitemap\.xml$ index.php/sitemap [L]
RewriteRule ^.*/(.*)$ /index.php/$1 [L]

答案 2 :(得分:0)

规则的顺序很重要。规则按写入顺序处理。模式.*匹配所有内容,因此匹配规则

RewriteRule ^.*$ index.php [NC,L]

在所有请求到达最后一条规则之前重写所有请求。

当您将sitemap.xml规则置于顶部时,它将按预期工作。