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

конфигурация перезаписи nginx

Я новичок в nginx и пытаюсь установить довольно простые правила перезаписи, но они, похоже, не работают.

Просто для информации, это server { .. } имеет свой server_name domain.com *.domain.com.

у меня есть это rewrite ^ /index.php?/$request_uri; который, кажется, отлично работает. Это будет соответствовать domain.com/asd/sad/sad, и все будет работать так, как должно.

Однако я хотел бы сделать что-нибудь забавное с поддоменами ... так что у меня есть s1.domain.com и s198.domain.com но я хотел бы изменить свою перезапись, чтобы она перешла в /index.php?/s1/$request_uri если в этом есть смысл? Таким образом, субдомен входит до $request_uri.

Это то, что я пробовал до сих пор:

if ($host ~* ^([a-z]+)\..*) {
    rewrite ^(.*)$ /index.php?/$1/$request_uri;
}
rewrite ^ /index.php?/$request_uri;

Действительно ценю любую помощь, которую вы можете оказать!

Спасибо.

Во-первых: использование if автор Nginx не одобряет его по очень веской причине: он имеет очень неприятные побочные эффекты. Вы все еще можете использовать его в простых случаях использования, но используя if и rewrite одновременно как бомба.

Ваш вариант использования можно легко реализовать, используя два server разделы:

server {
  server_name domain.com;

  rewrite ^ /index.php?/$request_uri last;
}

server {
  server_name ~ ^(?<SUB>.+)\.domain.\com$ ;

  rewrite ^ /index.php?/$SUB/$request_uri last;
}

Вы можете изменить свое правило на

rewrite ^ /index.php?/$host/$request_uri;

но, к сожалению, это дает вам "пути" вроде '/index.php?/s1.domain.com/asd/sad/sad', а не '/index.php?/s1/asd/sad/sad', как кажется после.

Вы можете просто использовать $_SERVER['HTTP_HOST'] переменной в вашем PHP-скрипте и выясните соответствующие изменения в самом вашем скрипте вместо того, чтобы заставлять nginx делать всю работу?

Отредактировано для добавления:

Написал это перед тем, как опубликовать свой комментарий о FuelPHP; не знаю, что это такое, но я полагаю, это означает, что вы либо не можете, либо не хотите (не то чтобы это плохо) вносить изменения в сценарий, как я предлагал. Хотя опубликованное вами правило Apache не выполняет автоматически то, что вы просите для любого заданного поддомена, оно также работает для dev.domain.com, но не для других.