2016-10-28 4 views
12

私と同じ問題を抱えている多くの人が見つかりましたが、適切な解決策を見つけることができませんでした。NGINXが私の代わりにPHPファイルを提供しています

私は迷惑メールとホームステッド経由でNGINXサーバーを実行しています。生産終了に私は、Apacheを使用していますので、私はhtaccessファイルを持っている:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !(^cms-system/public|^assets) 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^(.*)$ cms-system/public/$1 [L] 

私はCMSである私のindex.phpに(CMSシステム/公共および資産を除く)すべてのURLを書き換えるために、このhtaccessファイルを使用します-system/public。

このhtaccessをこのツールでnginxの設定に変換しようとしました:https://winginx.com/en/htaccessこれはうまくいきませんでした。私はいくつかの調整を行いました。例外ルールは機能しますが、index.phpを書き直すことはできません。誰かが私を助けてくれますか?

server { 
    listen 80; 
    listen 443 ssl http2; 
    server_name company.dev; 
    root "/home/vagrant/company/"; 

    index index.html index.htm index.php; 

    charset utf-8; 

    location ~ ^/cms-system/public/(.*) { 

    } 

    location ~ ^/assets/(.*) { 

    } 

    location/{ 
     if ($request_uri !~ "-f"){ 
      rewrite ^(.*)$ /cms-system/public/$1 break; 
     } 
    } 

# original location rule 
# location/{ 
#  try_files $uri $uri/ /index.php?$query_string; 
# } 

    location = /favicon.ico { access_log off; log_not_found off; } 
    location = /robots.txt { access_log off; log_not_found off; } 

    access_log off; 
    error_log /var/log/nginx/company.dev-error.log error; 

    sendfile off; 

    client_max_body_size 100m; 

    location ~ \.php$ { 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
     fastcgi_index index.php; 
     include fastcgi_params; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 

     fastcgi_intercept_errors off; 
     fastcgi_buffer_size 16k; 
     fastcgi_buffers 4 16k; 
     fastcgi_connect_timeout 300; 
     fastcgi_send_timeout 300; 
     fastcgi_read_timeout 300; 
    } 

    location ~ /\.ht { 
     deny all; 
    } 

    ssl_certificate  /etc/nginx/ssl/company.dev.crt; 
    ssl_certificate_key /etc/nginx/ssl/company.dev.key; 
} 
+3

PHP7は '/ var/run/php/php7.0-fpm.sock'ファイルを作成していますか?デフォルトのPHP-FPMプールでは、そのソケットファイルを使用する必要があります。 –

+0

こんにちは。答えは本当に恐ろしいので、私はあなたを助けてあげましょう。私は次の声明で訂正しますか? 1) '/ images/logo.png'と' /images/logo.png'が見つかりませんでしたが、 '/cms-system/public/images/logo.png'が存在する場合、このファイルを送信する必要があります。 2) '/cms-system/public/index.php'を介して配信されたすべてのリクエスト(/ assets/*を除く)は見つかりませんでした。また、4) '/ cms-system/public/index.php'や'/cms-system/public/images/logo.png'のようなダイレクトリクエストのサポートが必要ですか?そして5) '/ some.php/custom/path /'のようなリクエストが必要ですか? –

答えて

6

これはあなたが必要とするすべてである:

location/{ 
try_files $uri @rewrite; 
} 

location @rewrite { 
if ($uri !~* "^/(cms-system\/public|assets)$") {set $block "A";} 
if (!-e $request_filename) {set $block "${block}B";} 
if ($block = "AB") {rewrite ^(.*)$ /cms-system/public/$1 last;} 
} 

代わりに:も

location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ { 
deny all; 
} 

読む:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !(^cms-system/public|^assets) 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^(.*)$ cms-system/public/$1 [L] 

これは、セキュリティ上の理由から推奨され
porting-standard-apaches-mod_rewrite-rules-to-nginx
How do I convert mod_rewrite (QSA option) to Nginx equivalent?

+3

ありがとう!それは今では –

+3

訂正して動作します。結局は動作しません...キャッシングは私をだまされました。私は資産とvalemus/publicディレクトリに直接アクセスすることができますが、トップレベルのディレクトリになるのではなく、フルパスを介してのみアクセスできます。 ベースURLは私に403を与え、他のすべてのURLは500になります。 –

+3

@MartijnImhoff nginxはこれらのフォルダにアクセスできますか? –

関連する問題