Раньше проект переносился из /
к /subdir
. Поскольку старая структура URL-адресов была чем-то вроде /index.php?foo/123/bar
Я использовал следующую перезапись, чтобы все /forum
:
rewrite ^\/index\.php(.*)$ /forum/$1 last;
Проблема с этой перезаписью заключается в том, что она также перенаправляет /
к /forum/
и /index.php
к /forum/
. Теперь я не хочу их перенаправлять, потому что была создана новая стартовая страница в /
.
Так /
не следует перенаправлять, но если есть строка запроса, это необходимо.
Я пробовал следующее:
location / {
if ($query_string !~ "") {
rewrite ^\/index\.php(.*)$ /forum/$1 last;
}
try_files $uri $uri/ @rewrite;
}
Начальная страница сейчас работает, но если есть строка запроса, ничего не переписывается, и я не знаю почему.
После полудня молчания я в этом разобрался. Используя полную $request_uri
вне блока местоположения и корректировка регулярного выражения, чтобы любой символ после index.php
обязательно нормально работает:
location / {
try_files $uri $uri/ @rewrite;
}
if ($request_uri ~* "^\/index\.php(.+)$") {
rewrite ^(.*)$ /forum/$1 last;
}