我整天都在尝试为特定问题找到解决方案。
我的结构如下:
location / {
try_files $uri $uri/ /index.php?$uri&$args;
}
现在,子目录的所有php文件也都应该在/index.php中进行解析。
location /subdir/ {
try_files $uri $uri/ /index.php?$uri&$args;
}
当我单击/subdir/thread.php?t=123
时,$uri
包含/subdir/thread.php?t=123
。但我只想在/thread.php?t=123
中只有$uri
(不带子目录)。
这可能吗?我不想使用重写,因为我将此脚本用于重定向脚本。
答案 0 :(得分:0)
您需要使用正则表达式来捕获URI
中要传递给/index.php
的部分。使用location
或rewrite
来实现。
使用正则表达式 location
:
location ~ ^/subdir(/.*)$ {
try_files $uri $uri/ /index.php?$1&$args;
}
location ~ \.php$ { ... }
正则表达式 location
块是按顺序求值的,因此该块在配置文件中的位置很重要。
要将子目录中的.php
个文件发送到/index.php
,您需要将此location
块放置在location \.php$
块的上方。>
有关详细信息,请参见this document。
将命名为location
与rewrite
一起使用:
location ^~ /subdir/ {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ~/subdir(/.*)$ /index.php?$1 last;
}
^~
运算符确保子目录中的.php
个文件也被发送到/index.php
。
rewrite
自动附加原始查询字符串。有关详细信息,请参见this document。