Я новичок в 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, но не для других.