Перенаправить все голые подпапки в subfoldername / public /

Я пытаюсь выполнить перенаправление / перезапись .htaccess для всех подпапок верхнего уровня в подпапку.

Например, моя структура каталогов выглядит так

/public_html

  /site1
    /public 

  /site2
    /public

  /site3
    /public

Я бы хотел, чтобы любой, кто идет на example.com/site1/ , получил файлы с example.com/site1/public , но я не хочу, чтобы URL-адрес отображал public .

Вот что я пробовал: RewriteRule ^ /? ([^ /] +) / ([^ /] +) / ([^ /] +) /? $ Page-2.php? A = $ 1 & b = $ 2 & c = $ 3 [L, QSA] в ...

Как мне преобразовать свои правила 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

0
задан 6 August 2017 в 12:48
1 ответ

Проблема

Ваши комментарии говорят, что вы довольны вашими регулярными выражениями и переписываете выражения, и вам просто нужна помощь с частями вокруг Nginx и блоками расположения.

Беглый взгляд на них не наполняет меня уверенностью в том, что вы правильно переписали. Я бы ожидал чего-то большего - обратите внимание, что это, безусловно, будет некорректно, определённо не оптимально и может даже не пройти проверку "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 и 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
  }
}

Общий комментарий к вашему вопросу не очень точный, и не демонстрирует, что вы приложили все усилия, чтобы решить проблему самостоятельно

.
0
ответ дан 24 November 2019 в 04:09

Теги

Похожие вопросы