You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

.htaccess去PHP后缀失效致404,如何调整KSWeb服务器配置?

问题分析

首先,你遇到的核心问题是KSWeb服务器可能默认使用Lighttpd而非Apache(从官方旧回复可以看出),而Lighttpd并不支持.htaccess文件——这就是你原来的Apache重写规则完全失效、返回404的根本原因。另外,即使你配置了httpd.conf,如果Apache模块或虚拟主机配置没到位,也会导致规则不生效。

下面分两种场景给出解决方案:


场景1:KSWeb使用Lighttpd服务器(符合官方旧回复的情况)

按照官方提示,你需要把重写规则迁移到lighttpd.conf中,步骤如下:

  1. 启用mod_rewrite模块:打开lighttpd.conf,确保添加了以下配置(如果没有就加上):
    server.modules += ( "mod_rewrite" )
    
  2. 添加重写规则:在配置文件的合适位置(比如虚拟主机块内,或全局配置区)添加对应规则,把Apache的规则转成Lighttpd的语法:
    url.rewrite-once = (
      "^/([^.?]+)$" => "/$1.php"
    )
    
    这条规则的作用和你原来的.htaccess完全一致:将http://yourdomain:8080/page重写为http://yourdomain:8080/page.php
  3. 重启KSWeb服务器,让配置生效。

场景2:KSWeb使用Apache服务器(你配置了httpd.conf的情况)

如果确实在使用Apache,那你的httpd.conf有两个关键缺失,导致.htaccess不生效:

  1. 启用mod_rewrite模块:在httpd.conf开头的模块加载部分,添加以下代码(你的配置里没看到这个,这是重写功能的基础):
    LoadModule rewrite_module modules/mod_rewrite.so
    
  2. 允许.htaccess生效:找到你的虚拟主机配置文件(也就是localhost_host.conf),在对应的<Directory>块中添加AllowOverride All,比如:
    <Directory "/path/to/your/web/root">
        AllowOverride All
        Require all granted
    </Directory>
    
    默认AllowOverride None会禁止Apache读取.htaccess文件,必须改成All才能让重写规则生效。
  3. 优化.htaccess规则(可选但推荐):为了避免对不存在的PHP文件进行重写导致404,建议修改你的.htaccess规则,增加文件存在判断:
    RewriteEngine on
    # 仅当对应的.php文件实际存在时才执行重写
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^([^.?]+)$ %{REQUEST_URI}.php [L]
    
  4. 重启Apache服务,测试访问是否正常。

补充说明

你提到的官方旧回复意思很明确:Lighttpd不支持.htaccess这种目录级的配置文件,所有重写规则必须直接写在服务器的主配置文件lighttpd.conf中,这是Lighttpd和Apache的核心差异之一。

内容的提问来源于stack exchange,提问作者dizzy

火山引擎 最新活动