我正在使用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机器上
我做错了什么?
答案 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
规则置于顶部时,它将按预期工作。