.htaccess mod_rewrite规则“工作”,但服务器发送404代码!

时间:2010-09-15 10:58:44

标签: php apache .htaccess

我的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响应。奇怪的是,我的工具报告在同一个响应的主体中,服务器返回由PHP代码生成的正确的HTML。这似乎是一个矛盾:找不到页面,但这里是你想要的内容吗?

如果我强制服务器发送200代码([R = 200]),我会收到“内部服务器错误”响应,如果我强制它发送301代码([R = 301]),结果是浏览器发出2个HTTP请求而不是1,而第二个最终成为404(但我仍然在响应正文中获得所需的HTML!)。我很困惑!!!

1 个答案:

答案 0 :(得分:1)

解决。由于页面代码中的错误,CMS软件正在发送404标头。一旦我解决了这个问题,我就停止在响应头中获得404代码。

相关问题