我如何仅在点击时重定向到。sub1.example.com
例如,如果我在,点击不会将我重定向回,而是重定向到实际页面?$request_filename ~ /sub1
example.com
sub1.example.com
/sub1
sub1.example.com
sub1.example.com/sub1
我的NGINX配置:
server
{
server_name .example.com;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
root /var/www/html/example;
index index.php;
location ~ \.php$ {
if (-f $request_filename) {
fastcgi_pass 127.0.0.1:9000;
}
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location / {
if ($request_filename ~ /sub1) {
rewrite ^ http://sub1.example.com/? permanent;
}
if ($request_filename ~ /sub2) {
rewrite ^ http://sub2.example.com/? permanent;
}
if (!-f $request_filename) {
rewrite ^(.*)$ /index.php last;
}
}
}
如何使用 location
仅适用于根域的子句?
更新@Marcel:
server
{
server_name .example.com;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
root /var/www/html/example;
index index.php;
location ~ \.php$ {
if (-f $request_filename) {
fastcgi_pass 127.0.0.1:9000;
}
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location = /sub1 {
if($host = "example.com") {
rewrite ^ http://sub1.example.com permanent;
}
}
location = /sub2 {
if($host = "example.com") {
rewrite ^ http://sub2.example.com permanent;
}
}
location / {
if (!-f $request_filename) {
rewrite ^(.*)$ /index.php last;
}
}
}
答案1
不要在块If
内使用Location
。最好server {}
在配置中使用不同的声明几个部分server_name
。
而是if (-f $request_filename) {
使用try_files
指令。
答案2
Nginx 以特定方式处理位置指令,具体取决于您拥有哪些指令。此链接指出 nginx 的行为:
位置既可以通过前缀字符串定义,也可以通过正则表达式
定义。正则表达式的指定方法是在前面加上“~*”修饰符(用于不区分大小写的匹配),或加上“~”修饰符(用于区分大小写的匹配)。为了找到与给定请求匹配的位置,nginx 首先检查使用前缀字符串(前缀位置)定义的位置。从中搜索最具体的一个。
然后按照正则表达式在配置文件中的出现顺序检查正则表达式。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。如果未找到与正则表达式匹配的项,则使用最具体的前缀位置的配置。”
location /
是与每个请求匹配的通配符位置。
你的位置应该是这样的:
location ~ \.php$ {
if (-f $request_filename) {
fastcgi_pass 127.0.0.1:9000;
}
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location = /sub1 {
if($host = "example.com") {
rewrite ^ http://sub1.example.com permanent;
}
}
location = /sub2 {
if($host = "example.com") {
rewrite ^ http://sub2.example.com permanent;
}
}
location / {
if (!-f $request_filename) {
rewrite ^(.*)$ /index.php last;
}
}