Apache поддерживает различные модули для перезаписи / перенаправления запрошенных URI:
- mod_alias с
Alias
и AliasMatch
для внутренней перезаписи, а также Redirect
и RedirectMatch
для внешнего перенаправления - mod_rewrite с
RewriteRule
для внутреннего переписывания и внешнего перенаправления
Основное различие между директивами mod_alias и mod_rewrite заключается в том, что mod_alias *Директивы 1018 * и Redirect
работают с шаблонами префиксов пути, в то время как другие директивы (например, AliasMatch
, RedirectMatch
и RewriteRule
) работают с регулярными выражениями.
Шаблон префикса пути всегда всегда соответствуеткогда это квалифицированный префикс запрошенного пути, а остальные сегменты пути автоматически добавляются к целевому пути.Вот пример:
Redirect /foo/bar http://other.example/quux
Если запрашивается /foo/bar
, он перенаправляется на http://other.example/quux
;аналогично /foo/bar/baz
перенаправляется на http://other.example/quux/baz
.Alias
работает аналогично, но только внутри.
В противоположность этому AliasMatch
, RedirectMatch
и RewriteRule
работают с регулярными выражениями и могут использоваться не только для сопоставления префиксов пути.Вот пример:
RedirectMatch ^/foo/bar$ http://other.example/quux
Если запрашивается /foo/bar
, он перенаправляется на http://other.example/quux
(так же, как пример Redirect
выше).Но если запрашивается /foo/bar/quux
, он не перенаправляется, так как ^/foo/bar$
не соответствует /foo/bar/quux
.
Дальнейшие различия между mod_alias и mod_rewrite заключаются в том, что mod_rewrite также может проверять другие части URI, кроме путии даже поля заголовка HTTP-запроса.Он также позволяет выполнять более сложные операции с несколькими условиями.