我的网站多年来一直运行在 nginx 上。有 SSL 和非 SSL 位置。PHP 通过 .shtml 文件运行
正在开发 Facebook 应用,现在需要让它同时适用于 SSL 和非 SSL URL。现在正在我的服务器上测试编码。我无法让它在 SSL 配置中工作。
如果我去http://www.example.com/myappsname页面加载。
https://www.example.com/myappsname/index.shtml页面加载。<-注意 https
https://www.example.com/myappsname/页面显示 404
以下是 SSL 服务器部分的相关位置:
location / {
root /usr/local/apache/htdocs;
rewrite ^(.+) http://www.example.com$1 permanent;
index index.shtml index.php;
}
location ~ \.(shtml|php|inc)$ {
root /usr/local/apache/htdocs;
include /usr/local/nginx/conf/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:10004;
}
location ^~ /myappsname/ {
index index.shtml;
root /usr/local/apache/htdocs/;
fastcgi_intercept_errors on;
include /usr/local/nginx/conf/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:10004;
fastcgi_param HTTPS on;
}
如果有人向我指出这一点,我可能会大吃一惊。我所有其他 SSL 位置都运行正常。知道为什么包含文件名仍保持 SSL,但删除它却会重定向吗?
答案1
使用您提供的配置,https://www.example.com/myappsname/
不会重定向,但是https://www.example.com/myappsname
,由于它与的前缀搜索不匹配,所以会重定向location ^~ /myappsname/
。
您的描述在 HTTPS URL 中使用了尾部斜杠,但在 HTTP URL 上没有斜杠 - 我猜这并不十分准确,并且您只会在 HTTPS URL 中没有尾部斜杠时看到重定向不正确地发生。
如果是这种情况,请修复前缀匹配 - 删除尾随斜杠,或者仅设置一个location = /myappsname
?