我一直绞尽脑汁想要弄清楚这一点。
我正在尝试添加指向 wordpress 博客的 /knowledge 子目录。但是 nginx 不会处理这些文件,而是将它们提供给浏览器进行下载。
请帮忙!
server {
listen 80;
listen [::]:80;
server_name domain.com;
return 301 https://domain.com$request_uri;
}
server {
listen 443 ssl;
server_name domain.com;
ssl_certificate /etc/ssl/domain_com-bundle.crt;
ssl_certificate_key /etc/ssl/domain_com.key;
root /opt/domain.com/public/;
location / {
try_files $uri @backend;
}
location @backend {
proxy_pass http://127.0.0.1:3030;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
#knowledge wordpress config
location ^~ /knowledge {
alias /opt/domainWordpress/;
index index.php index.html index.htm;
try_files $uri $uri/ knowledge/index.php?q=$uri&$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
答案1
nginx 使用单个location
块处理请求。你应该继续阅读nginx 如何处理请求。
您的问题在于处理您的 URI 的位置(/knowledge[...]
)与处理针对 PHP 的位置不同(/[...].php
我想是的)。
由于你使用了特殊^~
location
操作符,location
在选择最适合处理请求的块时,不会检查正则表达式块(如果此块匹配)。由于您的请求由此块(最长前缀)处理,因此它只会从磁盘处理文件,默认 MIME 类型已配置。
您可以尝试在块location ~ \.php$
内嵌套块。location ^~ /knowledge