我在两个不同的文件夹中有 2 个应用程序。我希望将根文件夹用于所有内容,但当 URL 中有 /SOMENAME 作为文件夹时除外,在这种情况下我希望指向该文件夹。
我尝试了几个位置/别名块,但都没有起作用(位置正确,但 php 文件没有提供静态内容)...请参阅下面的配置。
server {
listen 80;
#disable_symlinks off;
server_name join.mydomain.com; #allow few domains
root /www/main;
#removing the 'index.php'
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php;
}
index index.html index.php;
}
location /SOMENAME/ {
root /www/somename;
}
#######################
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param HTTPS on;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
答案1
您有两个 PHP 应用程序,托管在不同的文档根目录中,这意味着您需要两个location ~ \.php$
块。假设SOMENAME
和somename
实际上相同,您可以使用如下方法:
root /www/main;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
location ^~ /somename {
root /www;
try_files $uri $uri/ /somename/index.php;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
^~
指令上的修饰符使location
此前缀位置优先于其上方的正则表达式位置块,以便 PHP 脚本由正确的位置块处理。请参阅这个文件了解详情。
该try_files
指令是记录在这里。