Переписывание URL-адреса в строку запроса на Apache и Nginx
Я пытаюсь настроить некоторые перезаписи на двух отдельных серверах, используя mod-rewrite на Apache и один с помощью HttpRewriteModule на Nginx. Я не думаю, что я пытаюсь сделать что-то слишком сложное, но мои навыки регулярного выражения немного не хватает, и я действительно мог бы использовать некоторую помощь.
В частности, я пытаюсь преобразовать форматированный URL-адрес в строку запроса, чтобы ссылка отформатировалась следующим образом:
http://www.server.com/location/
указывает на это:
http://www.server.com/subdirectory/index.php?content=location
Все, что добавлено в конце отформатированного URL, должно быть добавлено к параметру "content" в строке запроса, так что это:
http://www.server.com/location/x/y/z
должен указывать на это:
http://www.server.com/subdirectory/index.php?content=location/x/y/z
Я уверен, что это должно быть возможно с использованием как Apache mod-rewrite, так и Nginx HttpRewriteModule на основе исследований, которые я сделал, но я не вижу, чтобы это работало. Если бы кто-нибудь мог дать мне несколько указаний о том, как собрать выражения для одной или обеих этих установок, я бы очень признателен. Спасибо!
Ответы
Ответ 1
В nginx вы соответствуете "/location" в директиве rewrite, фиксируете хвостовую строку в переменной $1 и добавляете ее к заменяющей строке.
server {
...
rewrite ^/location(.*)$ /subdirectory/index.php?content=location$1 break;
...
}
В Apache httpd.conf это выглядит очень похоже:
RewriteEngine On
RewriteRule ^/location(.*)$ /subdirectory/index.php?content=location$1 [L]
Взгляните на примеры в конце этой страницы: https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html
Ответ 2
Строка поиска: (.+)/location/(.*)$
строка замены: $1/subdirectory/index.php?content=location/$2
Ответ 3
Для Apache в файле htaccess в корне вашего документа добавьте:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/subdirectory/index\.php$
RewriteRule ^(.*)$ /subdirectory/index.php?content=$1 [L]
В nginx вы хотите сначала убедиться, что запросы для /subdirectory/index.php
пройдены, а затем переписать все остальное:
location ~ /subdirectory/index\.php$
{
}
location /
{
rewrite ^(.*)$ /subdirectory/index.php?content=$1 break;
}
Ответ 4
Это, вероятно, лучший способ сделать это в nginx:
location ^~ /location/ {
rewrite ^/(location/.*)$ /subdirectory/index.php?content=$1 last;
}
Подробнее см.