哪个 Web 服务器具有更好的重写语法并能紧密模仿 Apache 的语法?

哪个 Web 服务器具有更好的重写语法并能紧密模仿 Apache 的语法?

由于大多数开源项目都包含与 Apache 配合使用的 mod_rewrite 规则,因此我需要能够将它们转换为与 lighttpd 或 nginx 配合使用。哪个 Web 服务器允许我将规则完全转换为 Apache 中的等效规则?如果两者都可以完全转换,哪一个具有更好的语法和高级选项,可以更好地模仿 Apache?

例如,我将使用 Wordpress 的 .htaccess。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

答案1

如果您想保留重写规则,nginX 似乎是最佳选择。

可以这样做:

if (!-e $request_filename) {
  rewrite ^([_0-9a-zA-Z-]+)?(/.*) $2  break;
  rewrite ^([_0-9a-zA-Z-]+)?(/.*\.php)$ $2 last;
  rewrite ^ /index.php last;
}

但 nginX 的强大之处在于它拥有更少的复杂性、更小的规则,所以这可能是替代它的更好方法:

if (!-e $request_filename) {
  rewrite ^ /index.php last;
}

答案2

只是为了给下一位访问者一个完整的答案,lighttpd 确实支持重写规则,尽管它们不直接支持 -f 和 -d 标签的等效项来首先验证同名文件和目录的存在。

目前有三种解决方案:

  1. 等到功能 985已实现到标准发行版中,这通常会在下一个 1.4.23 中发生。或者您自己修补自己的版本。
  2. 使用 lighttpd 的mod_magnet来测试一下。
  3. 将您的静态文件放在固定目录中,例如 medias,并为该目录设置例外,例如:

    $HTTP["host"] == "yoursite" {
        # all other config here ...
        alias.url = (
            "/medias" => "/var/www/yoursite/public/medias"
        )
        url.rewrite-once = (
            "^/medias/(.*)" => "$0",
            "^/(.*)$" => "/index.php/$1",
            "^/$" => "/index.php",
        )
    }
    

答案3

也许可以研究一下“Cherokee”网络服务器。它是 Apache 的轻量级、快速替代品,并且具有一些非常不错的功能。

答案4

不管哪个“轻量级”网络服务器速度更快(它们都比 Apache 快得多)。对于 Cherokee,我要说的是,它的管理 Web 界面非常容易使用。显然,由于它是基于 Web 的,因此配置与 Apache 有很大不同。我会称它为令人愉快的替代品,而不是令人恼火的替代品。

但归根结底...,只有 Apache 才是 Apache。Apache 的优势在于其 AAA 级灵活性。

相关内容