我正在尝试建立一个基本上有3种不同类型内容的nginx服务器:
/qa
中(在Question2Answer上运行)/qa
)我遇到了各种各样的麻烦。我当前的配置(在服务器块内)是:
# Q2A
if ($request_uri ~* "^/qa/") {
rewrite ^/qa/(.*)$ /qa/index.php?qa-rewrite=$1 last;
}
# CI
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?$1 last;
}
location / {
index index.php index.html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_cache one;
fastcgi_cache_key $scheme$host$request_uri;
fastcgi_cache_valid 200 302 304 5m;
fastcgi_cache_valid 301 1h;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /srv/www/site$fastcgi_script_name;
fastcgi_param HTTPS off;
}
除了这些问题之外,这主要是有效的:
qa
文件夹中的所有静态文件都传递给Q2A应用,而不是作为静态文件提供我已经尝试了很多不相同的东西,例如使用像location ~* ^/qa/ {}
这样的位置块和try_files
的各种排列,但没有运气。我也尝试修改this Wordpress example on the nginx site。其中大多数只是以/qa/
返回404结束。有些方法导致服务器提供原始PHP代码!
任何人都可以帮助设置正确的方法吗?
答案 0 :(得分:1)
替换
if ($request_uri ~* "^/qa/") {
rewrite ^/qa/(.*)$ /qa/index.php?qa-rewrite=$1 last;
}
带
location ~ /qa/(.*)? {
try_files $uri /qa/index.php?qa-rewrite=$1&$query_string;
}
也是块
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?$1 last;
}
最好移到/
位置并转换为try_files
location / {
index index.php index.html;
try_files $uri /index.php?$request_uri
}
如果你还有问题,请告诉我。
答案 1 :(得分:0)
If is evil。但是你可以使用try_files
和一些位置块来完成同样的事情。
# in a `server` block
index index.php index.html;
# case sensitive version
# location ~ ^/qa/(.*)?$ {
location ~* ^/qa/(.*)?$ {
try_files $uri /qa/index.php?qa-rewrite=$1;
}
location / {
try_files $uri /index.php?$request_uri;
}
# not sure if you even need location /, this might work
# try_files $uri /index.php?$request_uri;
# the rest of your FastCGI config stuff here
答案 2 :(得分:0)
这是基于我用于运行nginx的PHP站点的配置。
请注意,这是未经测试的,但它应该有效,因为它只是稍微修改过的版本。
只需将(insert)替换为log和root指令中的服务器值。
server {
listen 80;
access_log /var/log/nginx/(insert).access.log;
error_log /var/log/nginx/(insert).error.log;
root (insert);
server_name (insert);
rewrite ^/qa/(.*(?![\.js|\.css])[^.]+)$ /qa/index.php/$1 last;
rewrite ^(.*(?![\.js|\.css])[^.]+)$ /index.php/$1 last;
location ~ [^/]\.php(/|$) {
fastcgi_cache one;
fastcgi_cache_key $scheme$host$request_uri;
fastcgi_cache_valid 200 302 304 5m;
fastcgi_cache_valid 301 1h;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
fastcgi_index index.php;
include fastcgi_params;
}
}