HTAccess规则导致sitemap.xml无法正常加载的问题求助
解决sitemap.xml被HTAccess错误重写的问题
嘿,我完全懂你碰到的这个坑——现在你的Rewrite规则会把所有请求一股脑转发到index.php,哪怕是像sitemap.xml这种真实存在的静态文件,自然就会返回那个空白的动态页面了。
解决起来很简单,只需要给重写规则加两个前置条件,告诉Apache跳过对真实存在的文件和目录的重写就行。具体操作如下:
在
RewriteEngine on之后、你的原有重写规则之前,插入这两行条件:RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d!-f意思是:如果请求的路径不是一个已经存在的文件!-d意思是:如果请求的路径不是一个已经存在的目录
把你的重写规则放在这两个条件之后,这样只有当请求的内容不是真实存在的文件/目录时,才会触发重写逻辑。
修改后的完整HTAccess示例大概是这样的:
RewriteEngine on ##### Security ##### ## Keep people out of .inc files <files *.inc.php> order allow,deny deny from all </files> # 新增:排除真实存在的文件和目录,避免静态资源被错误重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 你的原有重写规则(根据实际需求调整,这里匹配无后缀路径转成page_url参数) RewriteRule ^([^\.]+)$ index.php?page_url=$1 [NC,L]
调整之后,访问sitemap.xml时,Apache会直接返回这个真实存在的文件,不会再把它转发到index.php了。而且其他类似的静态资源(比如robots.txt、图片、CSS文件)也会自动被排除在外,不会受到重写规则的干扰。
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

