求助:如何通过.htaccess将sitemap-latest.php扩展名改写为XML?
解决sitemap-latest.php转.xml访问的.htaccess规则问题
正确的规则配置
直接用下面的.htaccess规则,就能同时实现访问.xml时加载.php内容,以及访问.php时301跳转到.xml:
RewriteEngine On # 把访问sitemap-latest.php的请求301重定向到.xml RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /sitemap-latest\.php\ HTTP/ RewriteRule ^sitemap-latest\.php$ /sitemap-latest.xml [R=301,L] # 内部将sitemap-latest.xml的请求映射到实际的.php文件 RewriteRule ^sitemap-latest\.xml$ sitemap-latest.php [L]
之前规则的问题分析
- 第一条规则无效果:这条规则负责.xml转.php的内部重写,但你测试时访问的是.php路径,所以不会触发;而且注释掉的
!-f/!-d条件完全没必要,我们是精确匹配指定文件名,不需要判断文件是否存在。 - 第二条规则跳转到服务器路径:使用
R=301时,RewriteRule的目标如果不加开头的/,Apache会错误地把服务器文件系统的绝对路径拼到URL里,加上/后才会基于站点根目录生成正确的前端URL。 - 第三条规则导致404:这条是内部重写规则,不会改变浏览器地址栏的URL,而且错误的顺序(先处理内部重写再处理重定向)会导致请求循环或文件找不到的问题。
注意事项
- 确保.htaccess文件和
sitemap-latest.php在同一个目录(网站根目录)。 - 测试前清空浏览器缓存,301重定向会被浏览器缓存,可能导致测试结果不准确。
- 确认你的Apache服务器已经开启
mod_rewrite模块,并且虚拟主机配置中设置了AllowOverride All,允许.htaccess生效。
内容的提问来源于stack exchange,提问作者Mehul Kumar
相关产品推荐
相关产品推荐

