Преобразование правил переписывания URL htaccess в nginx
Как я могу конвертировать мои правила htaccess здесь
RewriteRule ^/?([^/]+)/([^/]+)/?$ page-1.php?a=$1&b=$2 [L,QSA]
RewriteRule ^/?([^/]+)/([^/]+)/([^/]+)/?$ page-2.php?a=$1&b=$2&c=$3 [L,QSA]
в правилах nginx? Я пытался использовать конвертеры, но я получил следующее
winginx
location / {
rewrite ^/?([^/]+)/([^/]+)/?$ /page-1.php?a=$1&b=$2 break;
rewrite ^/?([^/]+)/([^/]+)/([^/]+)/?$ /page-2.php?a=$1&b=$2&c=$3 break;
}
anilcetin
rewrite ^/?([^/]+)/([^/]+)/?$ /page-1.php?a=$1&b=$2 last;
rewrite ^/?([^/]+)/([^/]+)/([^/]+)/?$ /page-2.php?a=$1&b=$2&c=$3 last;
Но ни один из них на самом деле не работал. В чем здесь проблема?
в моем коде здесь страница, как
domain.com?page-1.php?a=a&b=b
будет превращен в domain.com/a/b
domain.com?page-2.php?a=a&b=b&c=c
в domain.com/a/b/c
1 ответ
Эта проблема
В ваших комментариях говорится, что вы довольны своими регулярными выражениями и операторами перезаписи, и вам просто нужна помощь с деталями вокруг блоков Nginx и Location.
Быстрый взгляд на них не внушает мне уверенности, что вы правильно переписали. Я бы ожидал чего-то большего - обратите внимание, что это, безусловно, будет неверно, определенно не оптимально и может даже не проходить проверки "nginx -t".
rewrite ^/([0-9a-zA-Z_\-\s\+]+)?a=([0-9a-zA-Z_\-\s\+]+)&b=([0-9a-zA-Z_\-\s\+]+)*c=([0-9a-zA-Z_\-\s\+]+) /$2/$3/$4;
Общая идея здесь - это группа захвата для каждой части URL, которая вас интересует, плюс одна предварительная, которая не используется. Это первое, потому что я не очень хорош в регулярных выражениях, и мне проще скопировать и вставить что-то из одной из моих собственных конфигураций, которые могут работать.
Nginx Locations и RegEx
Перезапись Nginx может происходить в контексте сервера или расположения, и работать в порядке в файле конфигурации. Для вас я бы, вероятно, разместил их в верхней части файла конфигурации сайта, над блоками расположения
server {
server_name example.com;
listen 80;
rewrite ^/?([^/]+)/([^/]+)/?$ /page-1.php?a=$1&b=$2 break;
rewrite ^/?([^/]+)/([^/]+)/([^/]+)/?$ /page-2.php?a=$1&b=$2&c=$3 break;
location / {
# Whatever you want in here to handle the rewritten or normally requested URLs
# root /var/www/html;
# proxy_pass 1.2.3.4;
}
location /a {
# If you want to handle specific URLs you can do it in another location block
}
}
Общий комментарий по вашему вопросу не очень точен и не демонстрирует, что вы приложили какие-то усилия, чтобы решить проблему самостоятельно.