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

Apache 2.4 Преобразование .htaccess перезаписывает в vhost.conf

У меня есть перезапись .htaccess, которую я хотел бы переместить в vhost.conf (я не хочу использовать .htaccess)

RewriteRule ^(.*?)(test_mod_rewrite) /$1media/plg_jchoptimize/assets/modrewrite.php?q=$2

RewriteRule ^(.*?)(gz|nz)/([^/]+)/([^/]+)/([^/]+)\.(js|css)$  /$1media/plg_jchoptimize/assets/jscss.php?f=$5&type=$6&gz=$2&d=$3&i=$4

Предполагая, что у меня включены соответствующие модули и выполнены предварительные условия (RewriteEngine On и т. Д.), Какие изменения необходимы, чтобы это правило работало в файле vhost.conf?

RewriteRules (при условии, что у вас также установлен RewriteEngine On) работают хорошо и почти одинаково как в файлах .htaccess, так и в конфигурации вашего виртуального хоста. Единственное основное отличие состоит в том, что он работает в контексте сервера, а не в каждом каталоге в вашей конфигурации vhost, что означает, что URL-адреса, такие как «foo», теперь вместо «/ foo» (обратите внимание на добавленную косую черту в начале , это то, о чем забывает большинство людей). Кроме того, результирующий путь в контексте сервера может быть полным путем файловой системы, а не только относительным URI.

RewriteRule foo.bar baz.abc теперь становится RewriteRule /foo.bar baz.abc

Способ, которым система определяет, указываете ли вы ей использовать создание перезаписи пути файловой системы или относительного URI, заключается в проверке первого бита результата по файловой системе. Таким образом, если вы переписываете / foo в / home / foo, а / home существует в вашей файловой системе, это будет рассматриваться как перезапись файловой системы, а не просто перезапись относительного URI.

Предполагая, что у вас есть / home, но нет / img на вашем файловая система, затем:

RewriteRule /index.html /home/jane/index.html <- перезапись пути к файловой системе (/ home существует в файловой системе)

RewriteRule /index.html /img/index.html <- относительная перезапись (/ img не существует в файловой системе, поэтому результатом является youdomain / img / index.html)

Надеюсь, это ответит на ваш вопрос

Проблема была связана с другим правилом перезаписи вне блока.

По истории - это работает. Измените каталог по своему усмотрению.

<Directory /var/www/site/public_html/media/plg_jchoptimize/assets/>
    RewriteEngine On
    RewriteRule ^(.*?)(test_mod_rewrite) /$1media/plg_jchoptimize/assets/modrewrite.php?q=$2
    RewriteRule ^(.*?)(gz|nz)/([^/]+)/([^/]+)/([^/]+)\.(js|css)$  /$1media/plg_jchoptimize/assets/jscss.php?f=$5&type=$6&gz=$2&d=$3&i=$4
    Require all granted
</Directory>