我在子目录www.mysite.com/shop/
下运行Lemonstand这是我对lemonstand的位置规则:
# Lemonstand
location /shop {
root /home/sites/mysite.com/public_html/shop/;
index index.php;
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param SCRIPT_NAME index.php;
fastcgi_param QUERY_STRING url=$uri&$args;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 64k;
}
我可以访问mysite.com/shop上的页面。
商店的所有网址应:
mysite.com/shop/category/freight
mysite.com/shop/products/dog-toy
实际上在页面上,它们的结构如下:
mysite.com/category/freight
mysite.com/products/dog-toy
奇怪的是,即使我在浏览器中粘贴了正确的URL,也只会显示我的基础/商店/页面,就好像其他页面不存在一样。有人可以帮忙吗?
答案 0 :(得分:0)
您需要从不同的位置块提供php。
[编辑]为避免与其他php脚本冲突,您可以使用命名位置。
location ^~/shop/ {
root /home/sites/mysite/public_html;
try_files $uri $uri/ @anotherPhpSite
}
location @anotherPhpSite {
include fastcgi_params;
# Defend against arbitrary PHP code execution
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# More info:
# https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-and-nginx-dont-trust-the-tutorials-check-your-configuration/
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root/shop/index.php;
fastcgi_param SCRIPT_NAME /shop/index.php;
fastcgi_param QUERY_STRING url=$uri&$args;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 64k;
}
答案 1 :(得分:0)
我的主要问题是表达式语法和配置结构。
行。所以这是工作配置文件。最佳实践是拆分这两个位置,并为它们使用一个php块。
首先使用silverstripe CMS的主控制器块,这里我将数据直接传递给蓝宝石中的主控制器。
# Main silverstripe declaration
location / {
index /sapphire/main.php;
try_files $uri $uri/ /sapphire/main.php?url=$uri&$args;
}
第二个是我的商店在一个运行lemonstand的子目录下。主要是获取表达式正确,然后将请求传递到相关路径的情况。我没有在这里设置另一个根或别名,因为规则是从重写继承的。
# Shop lemonstand files
location /shop/ {
index index.php;
rewrite ^/shop(.*)$ /shop/index.php?q=$1 last;
try_files $uri $uri/ /shop/index.php?q=$1;
}
最后我使用了一个通用的PHP块,所以我不需要在前两个中复制我的代码。所以经过前两个区块的任何东西都会传到这里。
# PHP controller
location ~ ^(.*?\.php)(/.*)?$ {
fastcgi_split_path_info ^(.+?\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 64k;
}