У меня есть перезапись .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>