2016-12-27 6 views
1

私はhttp-> httpsリダイレクト+非www-> wwwリダイレクトを設定しました。 2つのパスをhttpsにリダイレクトしないように除外します。 私は多くの可能な設定を試みました。私は404を取得するか、httpsバージョンにリダイレクトされます。ロケーションの例外を含むnginx/php-fpm - 404

はここ/ LOC2 /パスを取得しようとすると、404を返し、現在の設定、(#curl http://www.server.dev/loc2/18a9BM4Lay)です:

server { 
    listen 80; 
    listen [::]:80; 
    server_name server.dev; 
    location/{ 
return 301 https://$server_name$request_uri; 
    } 
    location /loc1/ { 
     try_files $uri $uri/ /index.php?$args; 

    } 
    location /loc2/ { 
     try_files $uri $uri/ /index.php?$args; 
    } 
} 

server { 
    listen 80; 
    listen [::]:80; 
    server_name www.server.dev; 
    root /var/www/web/server/public; 

    location/{ 
# return 301 https://$server_name$request_uri; 
    } 

     location ^~ /loc1/ { 
#  root /var/www/web/server/public; 
    index index.php; 
#  try_files $uri $uri/ /index.php?$args; 
     include pool_web.conf; 
     } 

     location ^~ /loc2/ { 
#  root /var/www/web/server/public; 
    index index.php; 
#  try_files $uri $uri/ /index.php?$args; 
     location ~ \.php$ { 
       # regex to split $uri to $fastcgi_script_name and $fastcgi_path 
       fastcgi_split_path_info ^(.+\.php)(/.+)$; 
       # Check that the PHP script exists before passing it 
       try_files $fastcgi_script_name =404; 
       # Bypass the fact that try_files resets $fastcgi_path_info 
       # see: http://trac.nginx.org/nginx/ticket/321 
       set $path_info $fastcgi_path_info; 
       fastcgi_param PATH_INFO $path_info; 
       include fastcgi.conf; 
       fastcgi_read_timeout 360s; 
       fastcgi_intercept_errors on; 

       fastcgi_pass unix:/var/run/server-php7.0-fpm.sock; 
    } 
# include pool_web.conf; 

     } 

     } 


server { 
# listen 80; 
# listen [::]:80; 

    listen 443 ssl http2; 

    ssl_certificate /etc/ssl/server.crt; 
    ssl_certificate_key /etc/ssl/server.key; 

    server_name server.dev; 
    rewrite ^ $scheme://www.server.dev$request_uri? permanent; 
} 

server { 
# listen 80; 

    listen 443 ssl http2; 

    ssl_certificate /etc/ssl/server.crt; 
    ssl_certificate_key /etc/ssl/server.key; 

    server_name www.server.dev; 

    root /var/www/web/server/public; 

    index index.php; 

    location/{ 
     try_files $uri $uri/ /index.php?$args; 
    } 

    location /images/ { 
     try_files $uri =404; 
    } 

    location ~ \.php$ { 
     include pool_web.conf; 
    } 

    location ~ \.(css|htc|less|js|js2|js3|js4)$ { 
     expires 31536000s; 
     add_header Pragma "public"; 
     add_header Cache-Control "max-age=31536000, public"; 
    } 

    location ~ \.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|woff|xla|xls|xlsx|xlt|xlw|zip)$ { 
     expires 31536000s; 
     add_header Pragma "public"; 
     add_header Cache-Control "max-age=31536000, public"; 
    } 
} 
+0

'/ var/www/web/server/public/loc2/18a9BM4Lay'というファイルがありますか?あるいは何か他のことが起こると思いますか? –

+0

そのファイルは存在しません。むしろindex.phpは/ loc2 /パスを扱います。 – syst0m

答えて

0

あなたはデフォルトのハンドラを定義するためにtry_filesステートメントを追加する必要があります。 indexディレクティブは、ディレクトリが指定されている場合にのみ機能します。例えば

location ^~ /loc2/ { 
    try_files $uri $uri/ /loc2/index.php; 
    ... 
} 

詳細はthis documentを参照してください。

+0

2. 'location ^〜/ loc2/{ try_files $ uri $ /iindex.php?$args; \t ... \t} ' httpsにリダイレクトします:nginxの/: #curl http://www.server.dev/loc2/18ayBMOLVy -L -k -I HTTP/1.1 301は永久 サーバーを移転1.10.1(Ubuntu) 日付:Tue、27.12.16 15:43:14 GMT コンテンツタイプ:text/html コンテンツの長さ:194 接続:キープアライブ 場所:https://www.server .dev/loc2/18ayBMOLVy HTTP/1.1 200 OK – syst0m

+0

1. 'location ^〜/ loc2/{try_files $ uri $ uri//loc2/index.php?$args; ...} '生成:' * 173内部的に "/loc2/index.php"、クライアント:127.0.0.1、サーバ:www.server.dev、リクエスト: "GET/loc2/18ayBMOLVy"にリダイレクトするHTTP/1.1 "、ホスト:" www.server.dev "' - – syst0m

関連する問題