.htaccess去PHP后缀失效致404,如何调整KSWeb服务器配置?
问题分析
首先,你遇到的核心问题是KSWeb服务器可能默认使用Lighttpd而非Apache(从官方旧回复可以看出),而Lighttpd并不支持.htaccess文件——这就是你原来的Apache重写规则完全失效、返回404的根本原因。另外,即使你配置了httpd.conf,如果Apache模块或虚拟主机配置没到位,也会导致规则不生效。
下面分两种场景给出解决方案:
场景1:KSWeb使用Lighttpd服务器(符合官方旧回复的情况)
按照官方提示,你需要把重写规则迁移到lighttpd.conf中,步骤如下:
- 启用mod_rewrite模块:打开
lighttpd.conf,确保添加了以下配置(如果没有就加上):server.modules += ( "mod_rewrite" ) - 添加重写规则:在配置文件的合适位置(比如虚拟主机块内,或全局配置区)添加对应规则,把Apache的规则转成Lighttpd的语法:
这条规则的作用和你原来的url.rewrite-once = ( "^/([^.?]+)$" => "/$1.php" ).htaccess完全一致:将http://yourdomain:8080/page重写为http://yourdomain:8080/page.php。 - 重启KSWeb服务器,让配置生效。
场景2:KSWeb使用Apache服务器(你配置了httpd.conf的情况)
如果确实在使用Apache,那你的httpd.conf有两个关键缺失,导致.htaccess不生效:
- 启用mod_rewrite模块:在
httpd.conf开头的模块加载部分,添加以下代码(你的配置里没看到这个,这是重写功能的基础):LoadModule rewrite_module modules/mod_rewrite.so - 允许.htaccess生效:找到你的虚拟主机配置文件(也就是
localhost_host.conf),在对应的<Directory>块中添加AllowOverride All,比如:
默认<Directory "/path/to/your/web/root"> AllowOverride All Require all granted </Directory>AllowOverride None会禁止Apache读取.htaccess文件,必须改成All才能让重写规则生效。 - 优化.htaccess规则(可选但推荐):为了避免对不存在的PHP文件进行重写导致404,建议修改你的
.htaccess规则,增加文件存在判断:RewriteEngine on # 仅当对应的.php文件实际存在时才执行重写 RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^.?]+)$ %{REQUEST_URI}.php [L] - 重启Apache服务,测试访问是否正常。
补充说明
你提到的官方旧回复意思很明确:Lighttpd不支持.htaccess这种目录级的配置文件,所有重写规则必须直接写在服务器的主配置文件lighttpd.conf中,这是Lighttpd和Apache的核心差异之一。
内容的提问来源于stack exchange,提问作者dizzy




