2016-09-01 4 views
0

У меня есть два Htaccess файлы один для веб-сайта (корневой каталог) и один для его админки (админ папка):Htaccess для Nginx конфигурации

корень

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

RewriteRule ^admin/(.*)$ admin/$1 [NC,L,QSA] 
RewriteRule ^sign-out$ index.php?act=auth-signOut [NC,L,QSA] 

RewriteRule ^get/(.*)$ index.php?pag=download&id=$1 [NC,L,QSA] 
RewriteRule ^g/(.*)$ callback.php?act=download-download&id=$1 [NC,L,QSA] 
RewriteRule ^activate/(.*)$ index.php?act=auth-activate&u=$1 [NC,L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?pag=cms&title=$1 [NC,L,QSA] 

/админ

RewriteRule ^sign-in$ views/login.html [NC,L,QSA] 
RewriteRule ^sign-out$ index.php?act=auth-logout [NC,L,QSA] 

Мне удалось преобразовать часть сайта в правила конфигурации nginx, но когда я добавляю раздел администратора он не работает. Любая помощь приветствуется.

server { 
    listen  80; 
    server_name fileorbs.com; 

     root /var/www/fileorbs/public_html; 
     index index.php index.html; 


     location ~ \.php$ { 
       try_files $uri /index.php =404; 
       fastcgi_split_path_info ^(.+\.php)(/.+)$; 
       fastcgi_pass 127.0.0.1:9000; 
       fastcgi_index index.php; 
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
       include fastcgi_params; 
     } 

    location/{ 
     # First attempt to serve request as file, then 
     # as directory, then fall back to displaying a 404. 

     if (!-e $request_filename){ 
      rewrite ^/(.*)$ /index.php?pag=cms&title=$1&code=$2; 
     } 

     rewrite ^/admin/(.*)$ /admin/$1 last; 
     rewrite ^/sign-out$ /index.php?act=auth-signOut last; 
     rewrite ^/get/(.*)$ /index.php?pag=download&id=$1 last; 
     rewrite ^/g/(.*)$ /index.php?act=download-download&id=$1 last; 
     rewrite ^/activate/(.*)$ /index.php?act=auth-activate&u=$1 last; 

     try_files $uri $uri/ =404; 
    } 

    location /admin { 
     rewrite ^/sign-in$ /views/login.html last; 
     rewrite ^/sign-out$ /index.php?act=auth-logout last; 
    } 
} 

ответ

1

Обратите внимание, что apache сначала проверяет root-.htaccess, затем переходит к/admin. Nginx использует местоположение в качестве предпочтительного совпадения. Это два совершенно разных метода.

http://nginx.org/en/docs/http/request_processing.html

Добавление последнего на каждый переписать вы сказать Nginx «выполнить это переписывание», так и в самом деле, ваш /администратор местоположение не процессы сейчас никуда.

http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html#rewrite

Кроме того, что именно следует, что правило делать? Как я undestand, он просто перенаправляет на себя один раз:

RewriteRule ^admin/(.*)$ admin/$1 [NC,L,QSA] 
rewrite ^/admin/(.*)$ /admin/$1 last; 

Если я understanded вашего конфигурационного права, что-то подобное должен работать:

server { 
    listen  80; 
    server_name fileorbs.com; 

     root /var/www/fileorbs/public_html; 
     index index.php index.html; 


     location ~ \.php$ { 
       try_files $uri /index.php =404; 
       fastcgi_split_path_info ^(.+\.php)(/.+)$; 
       fastcgi_pass 127.0.0.1:9000; 
       fastcgi_index index.php; 
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
       include fastcgi_params; 
     } 

    location/{ 
     # First attempt to serve request as file, then 
     # as directory, then fall back to displaying a 404. 

     if (!-e $request_filename){ 
      rewrite ^/(.*)$ /index.php?pag=cms&title=$1&code=$2; 
     } 

     rewrite ^/sign-out$ /index.php?act=auth-signOut last; 
     rewrite ^/get/(.*)$ /index.php?pag=download&id=$1 last; 
     rewrite ^/g/(.*)$ /index.php?act=download-download&id=$1 last; 
     rewrite ^/activate/(.*)$ /index.php?act=auth-activate&u=$1 last; 

     try_files $uri $uri/ =404; 
    } 

    location /admin { 
     rewrite ^/admin/(.*)$ /admin/$1 break; 
     rewrite ^/sign-in$ /views/login.html last; 
     rewrite ^/sign-out$ /index.php?act=auth-logout last; 
     try_files $uri $uri/ =404; 
    } 
}