[英].htaccess mod_rewrite rule “works”, but server sends 404 code!
我的Webroot上有以下.htaccess文件:
DirectoryIndex index.htm index.html index.php AddType application/x-httpd-php .htm .html
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} 200 RewriteRule .* - [L]
RewriteCond $1 !\.(gif|jpe?g|png|ico|css|js|pdf|mp3|flv|swf)$
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.+)\.htm$ /$1.php [nc,L,QSA]
重写规则的目的是将对扩展名为.htm的页面的任何请求更改为对扩展名为.php的相同文件名的请求(除非实际上存在扩展名为.htm的文件)。 从某种意义上说,如果我要求使用扩展名为.htm的页面,那么此规则似乎“有效”,我可以获得PHP内容。 这就是我想要的,但是同时HTTP标头检查器工具报告该网站给出了404响应。 奇怪的是,我的工具报告在THE SAME RESPONSE主体中,服务器返回了PHP代码生成的正确HTML。 这似乎是一个矛盾:找不到页面,但是无论如何这就是您想要的内容?
如果我强制服务器发送200代码([R = 200]),则会收到“内部服务器错误”响应,如果我强制服务器发送301代码([R = 301]),结果将是浏览器发出2个HTTP请求,而不是1个,无论如何,第二个请求最终还是一个404(但是我仍然在响应正文中获得了所需的HTML!)。 我糊涂了!!!
解决了。 由于页面代码中的错误,CMS软件正在发送404标头。 解决此问题后,我就停止在响应标头中获取404代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.