根据位置不同url改写
Different url rewriting according to locations
我真的找不到任何关于 URL 重写的文档(我无法理解,因为我意外地发现文档对于非本地人来说真的很难阅读)。
我正在寻找一种方法来将匹配 /*\.(js|png|jpg|css|ttf|xml)$/
的所有路由重写到 path/media/
并尝试文件是否存在,然后 return 如果存在,否则 404 not found
然后,如果它以 /ajax/
开头,则将其全部重定向到 path/ajax/index.php
否则将所有重定向到 path/www/index.php
我不太明白我应该怎么做,现在我创建了3个位置/media/、/ajax/和/www/,但我不知道这样是否正确使用重写而不是 return,或者这些位置是正确的方法。
我不太明白我在 sites-enabled/file
中写的关于 fastcgi 的内容。这是解释器路径吗?
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
如果我没记错的话,就是"if it ends with .php, and it exists in hierarchy, then execute it"。
而且我不知道是否应该为必须处理 php(/www/ 和 /ajax/)的每个位置放置那种东西,尤其是因为我我打算为两者做一些路由。而且,我不知道是否应该这样做。
最简单的 PHP 配置使用通用的 root
指令,该指令由位置块继承,在您的情况下是:
root path;
这意味着 /www/index.php
和 /ajax/index.php
都由 location ~ \.php$
块处理。
默认操作可以由 location /
块中的 try_files
指令定义:
location / {
try_files $uri $uri/ /www/index.php;
}
如果您需要对以 /ajax
开头的 URI 执行不同的默认操作,请添加更具体的位置:
location /ajax {
try_files $uri $uri/ /ajax/index.php;
}
如果您不希望您的媒体 URI 以 /media
开头,您可以覆盖一个特定位置的 root
:
location ~* \.(js|png|jpg|css|ttf|xml)$ {
root path/media;
}
在您的特定情况下,fastcgi_split_path_info
和 fastcgi_index
指令是不必要的。 include fastcgi_params;
语句应该放在任何 fastcgi_param
指令之前,以避免后者被无意中覆盖:
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
我真的找不到任何关于 URL 重写的文档(我无法理解,因为我意外地发现文档对于非本地人来说真的很难阅读)。
我正在寻找一种方法来将匹配 /*\.(js|png|jpg|css|ttf|xml)$/
的所有路由重写到 path/media/
并尝试文件是否存在,然后 return 如果存在,否则 404 not found
然后,如果它以 /ajax/
开头,则将其全部重定向到 path/ajax/index.php
否则将所有重定向到 path/www/index.php
我不太明白我应该怎么做,现在我创建了3个位置/media/、/ajax/和/www/,但我不知道这样是否正确使用重写而不是 return,或者这些位置是正确的方法。
我不太明白我在 sites-enabled/file
中写的关于 fastcgi 的内容。这是解释器路径吗?
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
如果我没记错的话,就是"if it ends with .php, and it exists in hierarchy, then execute it"。
而且我不知道是否应该为必须处理 php(/www/ 和 /ajax/)的每个位置放置那种东西,尤其是因为我我打算为两者做一些路由。而且,我不知道是否应该这样做。
最简单的 PHP 配置使用通用的 root
指令,该指令由位置块继承,在您的情况下是:
root path;
这意味着 /www/index.php
和 /ajax/index.php
都由 location ~ \.php$
块处理。
默认操作可以由 location /
块中的 try_files
指令定义:
location / {
try_files $uri $uri/ /www/index.php;
}
如果您需要对以 /ajax
开头的 URI 执行不同的默认操作,请添加更具体的位置:
location /ajax {
try_files $uri $uri/ /ajax/index.php;
}
如果您不希望您的媒体 URI 以 /media
开头,您可以覆盖一个特定位置的 root
:
location ~* \.(js|png|jpg|css|ttf|xml)$ {
root path/media;
}
在您的特定情况下,fastcgi_split_path_info
和 fastcgi_index
指令是不必要的。 include fastcgi_params;
语句应该放在任何 fastcgi_param
指令之前,以避免后者被无意中覆盖:
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}