Назад | Перейти на главную страницу

На каком веб-сервере лучше переписать синтаксис, точно имитирующий Apache?

Поскольку большинство проектов с открытым исходным кодом включают правила mod_rewrite для работы с Apache, мне нужно иметь возможность преобразовать их для работы с lighttpd или nginx. Какой веб-сервер позволяет мне точно преобразовывать правила в эквивалентные из Apache? Если оба могут быть преобразованы, какой именно из них имеет лучший синтаксис и расширенные параметры, которые лучше имитируют Apache?

Например, я использую .htaccess из Wordpress.

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

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;
}

Просто чтобы дать полный ответ для следующих посетителей, lighttpd поддерживает правила перезаписи, хотя они не поддерживают напрямую эквивалент тегов -f и -d, чтобы сначала проверить наличие файла и каталога с тем же именем.

На данный момент существует три решения:

  1. Подожди пока характеристика 985 реализована в стандартном дистрибутиве, что обычно должно произойти в следующей версии 1.4.23. Или пропатчите свою версию самостоятельно.
  2. Используйте lighttpd's 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",
        )
    }
    

Может быть, заглянуть на веб-сервер "Чероки". Это легкая, быстрая альтернатива Apache и имеет несколько довольно приятных функций.

Независимо от того, какой из «легких» веб-серверов быстрее (и все они намного быстрее, чем apache). Я скажу это для Cherokee, веб-интерфейс администратора очень прост в работе. Очевидно, что, поскольку он основан на веб-интерфейсе, конфигурация сильно отличается от apache. Я бы назвал это приятным, а не раздражающим.

но в конце концов ..., только Apache - это Apache. Сильная сторона Apache - его гибкость на уровне AAA.