5W site logo 5W - мой домашний сайт-блог с картинками, кино и плюшками.

lighttpd-rewrite.txt

Итак, обратимся к документации (прошу не пинать за вольный перевод)))):

Опции

url.rewrite-once

Перезапись набора URL-адресов внутри в веб-сервера, до того, как они будут обработаны.

Например:
Код:
url.rewrite-once = ( "<выражение>" => "<относительный_путь>" )


для одной цепочки правил и.
Код:
url.rewrite-once = (
"<выражение1>" => "<относительный_путь1>",
"<выражение2>" => "<относительный_путь2>"
)

для нескольких цепочек правил перезаписи URL.

url.rewrite-repeat

По сути то же что и предыдущая опция, но url.rewrite-once остановит дальнейшую перезапись URL, если выражение совпало, а с помощью url.rewrite-once можно использовать несколько вариантов перезаписи адресов.

Код:
url.rewrite-repeat = ( "<выражение>" => "<относительный_путь>" )


Опции url.rewrite и url.rewrite-final используются так же как url.rewrite-once начиная с версии 1.3.16

url.rewrite-[repeat-]if-not-file
(Введена в версии 1.4.24)

Перезапись набора URL-адресов внутри в веб-сервера, до того, как они будут обработаны, в случае если директория сервера не содержит файлов соответствующих <выражению> в запросе.
Синтаксис аналогичен url.rewrite-once.

Регулярные выражения:

Допускается использование след. шаблонов:

. (точка) - заменяет любой символ
\* (звездочка) - ноль или больше предыдущих символов
\+ (плюс) - соответствует одному или нескольким предыдущим символам
? (вопрос) - ноль или один из предыдущих символов
\\? (обратный слэш) - соответствие специальных символов
^ (крышка) - соответствует началу строки
$ (символ доллара) - соответствует концу строки
[set] - соответствует совпадению с одним из символов в квадратных скобках (любым)
[^set] - соответствует не совпадению ни с одним из символов в квадратных скобках
(<шаблон>) - группировка, модель соответствует как специальная переменная
(?!<слово-исключение>) - переписывать все запросы кроме запросов к <слову-исключению>. Например "^(/(?!(favicon.ico$|js/|images/)).*)" => "/index.php?$1" перепишет все запросы в параметры и переадресует их скрипту index.php за исключением запросов содержащих слова favicon.ico, js, images.

Нормальные алфавитно-цифровые символы рассматриваются как обычные.

Шаблоны замены

Если соответствующее регулярное выражение содержит группы в скобках, $1...$9 то замене подлежит захваченный текст в соответствующих группах - «$1» для первой группы, "$2" для второй, и так далее.

Обратите внимание, что использование переменных с % в синтаксисе замены (например,%1,%2,%0, и т.д.) в назначении url.rewrite-* разрешено, но не имеет смысла, поскольку они используются в синтаксисе evhost.path-*.

Несколько примеров использования с популярными CMS:

PHPbb 3.0.х Ultimate Seo Mod
Код:
#Dlya SEO ULtimate mod rewrite for lighttpd server
url.access-deny = (".htaccess")

$HTTP["url"] =~ "^/config.php" {
url.access-deny = ( "" )
}
$HTTP["url"] =~ "^/common.php" {
url.access-deny = ( "" )
}
url.rewrite-once = (
"^/(Tyt ukazivaete imya vashih realnih papok primer dalee ---|Plugin|adm|ads|docs|download|gallery|images|img|includes|language|styles|tmp|phpmyadmin
)$" => "/$1",
"^/(Tyt ukazivaete imya vashih realnih papok primer dalee ---|Plugin|adm|ads|docs|download|gallery|images|img|includes|language|styles|tmp|phpmyadmin
)/(.*)$" => "/$1/$2",
# FORUM INDEX REWRITERULE WOULD STAND HERE IF USED. "forum" REQUIRES TO BE SET AS FORUM INDEX
"^/forum\.html$" => "/index.php",
# FORUM ALL MODES
"^/(forum|[a-z0-9_-]*-f)([0-9]+)/?(page([0-9]+)\.html)?$" => "/viewforum.php?f=$2&start=$4",
# TOPIC WITH VIRTUAL FOLDER ALL MODES
"^/(forum|[a-z0-9_-]*-f)([0-9]+)/(topic|[a-z0-9_-]*-t)([0-9]+)(-([0-9]+))?\.html$" => "/viewtopic.php?f=$2&t=$4&start=$6",
# GLOBAL ANNOUNCES WITH VIRTUAL FOLDER ALL MODES
"^/announces/(topic|[a-z0-9_-]*-t)([0-9]+)(-([0-9]+))?\.html$" => "/viewtopic.php?t=$2&start=$4",
# TOPIC WITHOUT FORUM ID & DELIM ALL MODES
"^/([a-z0-9_-]*)/?(topic|[a-z0-9_-]*-t)([0-9]+)(-([0-9]+))?\.html$" => "/viewtopic.php?forum_uri=$1&t=$3&start=$5",
"^/([a-z0-9_-]*)/?(topic|[a-z0-9_-]*-t)([0-9]+)(-([0-9]+))?\.html\?(.+)$" => "/viewtopic.php?forum_uri=$1&t=$3&start=$5&$6",
# PHPBB FILES ALL MODES
"^/resources/[a-z0-9_-]+/(thumb/)?([0-9]+)$" => "/download/file.php?id=$2&t=$1",
# PROFILES ALL MODES WITH ID
"^/(member|[a-z0-9_-]*-u)([0-9]+)/$" => "/memberlist.php?mode=viewprofile&u=$2",
# USER MESSAGES ALL MODES WITH ID
"^/(member|[a-z0-9_-]*-u)([0-9]+)/(topics|posts)/?(page([0-9]+)\.html)?$" => "/search.php?author_id=$2&sr=$3&start=$5",
# GROUPS ALL MODES
"^/(group|[a-z0-9_-]*-g)([0-9]+)(-([0-9]+))?\.html$" => "/memberlist.php?mode=group&g=$2&start=$4",
# POST
"^/post([0-9]+)\.html$" => "/viewtopic.php?p=$1",
# ACTIVE TOPICS
"^/active-topics(-([0-9]+))?\.html$" => "/search.php?search_id=active_topics&start=$2&sr=topics",
# UNANSWERED TOPICS
"^/unanswered(-([0-9]+))?\.html$" => "/search.php?search_id=unanswered&start=$2&sr=topics",
# NEW POSTS
"^/newposts(-([0-9]+))?\.html$" => "/search.php?search_id=newposts&start=$2&sr=topics",
# THE TEAM
"^/the-team\.html$" => "/memberlist.php?mode=leaders",
# FORUM WITHOUT ID & DELIM ALL MODES (SAME DELIM)
"^/([a-z0-9_-]+)/?(page([0-9]+)\.html)?$" => "/viewforum.php?forum_uri=$1&start=$3"
)
url.redirect = (
# FIX RELATIVE PATHS : FILES
"^.+/(style\.php|ucp\.php|mcp\.php|faq\.php|download/file.php)$" => "/$1",
# FIX RELATIVE PATHS : IMAGES
"^.+/(styles/.*|images/.*)/$" => "/$1"
)


Wordpress
Код:
url.rewrite = (
"^/(wp-.+).*/?" => "$0",
"^/(sitemap.xml)" => "$0",
"^/(xmlrpc.php)" => "$0",
"^/(.+)/?$" => "/index.php/$1"
)


Wordpress установленный в подпапку (например "blog")
Код:
url.rewrite = (
"^/?$" => "/blog/index.php",
"^/blog/(wp-.+)$" => "$0",
"^/blog/xmlrpc.php" => "$0",
"^/blog/sitemap.xml" => "$0",
"^/blog/(.+)/?$" => "/blog/index.php/$1"
)


Drupal
Код:
url.rewrite-final = (
"^/system/test/(.*)$" => "/index.php?q=system/test/$1",
"^/([^.?]*)\?(.*)$" => "/index.php?q=$1&$2",
"^/([^.?]*)$" => "/index.php?q=$1",
"^/search/node/(.*)$" => "/index.php?q=search/node/$1"
)


Joomla
Код:
server.error-handler-404 = "/index.php"
url.rewrite-once = (
"^images*\\.(jpg|jpeg|gif|png)" => "$0",
"^/administrator.*$" => "$0",
"^/mambots.*$" => "$0",
"(/|\\.htm|\\.php|\\.html|/[^.]*)$" => "/index.php"
)


Заключение

В итоге для моей ситуации был выбран следующий конфиг рерайта нареканий на работу которого пока нет:
Код:
url.rewrite-if-not-file = (
"^/([^.?]*)\?(.*)$" => "/index.php?q=$1&$2",
"^/([^.?]*)$" => "/index.php?q=$1"
)