过去,一个项目从 移动到/
。/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;
}
开始页现在可以工作,但如果有查询字符串,则不会重写任何内容,我不知道为什么。
答案1
经过半天的沉默,我终于找到了答案。通过$request_uri
在位置块外部使用 full 并调整正则表达式以使任何字符在后面都是index.php
必需的,这样就可以正常工作:
location / {
try_files $uri $uri/ @rewrite;
}
if ($request_uri ~* "^\/index\.php(.+)$") {
rewrite ^(.*)$ /forum/$1 last;
}