2016-10-28 9 views
12

Benimle aynı sorunu yaşayan birçok insan buldum, ancak doğru çözümü bulamadım.NGINX, onları yürütmek yerine bana php dosyalarını sunuyor

Bir NGINX sunucusunu, vagrant ve homestead üzerinden çalıştırıyorum. Üretim ucunda apache kullanıyorum ve bu nedenle bir htaccess var:

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

Ben cms içinde benim index.php için (cms-sistemi/kamu ve varlıkları hariç) tüm URL'ler yeniden yazmak için bu htaccess kullanmak -sistem/kamu.

Bu htaccess'i bu araçla bir nginx yapılandırmasına dönüştürmeyi denedim: https://winginx.com/en/htaccess Çok iyi çalışmadı. Bazı ayarlamalar yaptım. Özel kurallar çalışır, ancak index.php dosyasının yeniden yazılmasını sağlayamıyorum. Birisi bana yardım edebilir mi? Hepsi bu

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'nin '/ var/run/php/php7.0-fpm.sock' dosyasını oluşturduğundan emin misiniz? Varsayılan PHP-FPM havuzu bu soket dosyasını kullanmalıdır. –

+0

Merhaba. Size yardım edeyim çünkü cevap gerçekten korkunç. Aşağıdaki ifadelerle düzeliyorum mu? 1) '/ images/logo.png' ve '/images/logo.png 'işlevlerini bulamazsak,' /cms-system/public/images/logo.png' var - bu dosyayı göndermemiz gerekiyor. 2) Bulunmayan tüm istekler (hariç/aktifler/*), /cms-system/public/index.php' üzerinden gerçekleştirildi. Ayrıca, 4) '/ cms-system/public/index.php' veya '/ cms-system/public/images/logo.png' gibi doğrudan taleplere de mi ihtiyacınız var? Ve 5) '/ some.php/custom/path/'gibi isteklere ihtiyacınız var mı? –

cevap

6

İhtiyacınız:

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;} 
} 

yerine:

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

Bu güvenlik nedenleriyle önerilir:

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

Ayrıca Oku:
porting-standard-apaches-mod_rewrite-rules-to-nginx
How do I convert mod_rewrite (QSA option) to Nginx equivalent?

+3

Teşekkürler! Şimdi –

+3

düzeltmesi çalışıyor .. her şeyden sonra işe yaramıyor ... önbellek beni kandırdı. Varlıklara ve valemus/public dizinine doğrudan ulaşabiliyorum, ancak sadece üst düzey dizinler olmak yerine tam yoldan geçiyorum. Temel url bana bir 403 veriyor ve diğer tüm URL'ler bir 500 sonuçlanıyor. –

+3

@MartijnImhoff Nginx'in bu klasörlere erişimi var mı? –