2014-09-04 3 views
0

Я пытаюсь переместить мой сервер из Apache в соответствии с настройкой Nginx. Тем не менее, у меня возникают проблемы с получением части магии Apache для htaccess для работы в Nginx.Nginx, переписать несколько вложенных папок

.htaccess, код, который я хотел бы передать это:

RewriteRule ^([a-zA-Z0-9_]+)/$     /index.php?page=$1 [L,QSA] 
RewriteRule ^([a-zA-Z0-9_]+).html$    /index.php?page=$1 [L,QSA] 
RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/.*/([a-zA-Z0-9_]+)$  /index.php?page=$1&id=$2&sub=$3 [L,QSA] 
RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/.*$  /index.php?page=$1&id=$2 [L,QSA] 

Я использовал online converter, который дал мне следующее расположение блока:

location/{ 
rewrite ^/([a-zA-Z0-9_]+)/$ /index.php?page=$1 break; 
rewrite ^/([a-zA-Z0-9_]+).html$ /index.php?page=$1 break; 
rewrite ^/([a-zA-Z0-9_]+)/([0-9]+)/.*/([a-zA-Z0-9_]+)$ /index.php?page=$1&id=$2&sub=$3 break; 
rewrite ^/([a-zA-Z0-9_]+)/([0-9]+)/.*$ /index.php?page=$1&id=$2 break; 
} 

К сожалению, я только смог получить одно место переписывается, чтобы работать за один раз (тот, который я поставил «последним») позади. Кажется, я не могу сделать это динамическое переписывание множественного URL вложенной папки в аргументы для одного PHP-скрипта.

Любая помощь по этому вопросу? Каков способ Nginx сделать такую ​​переписку? Я попытался использовать несколько местоположений для разных подпапок, но я предпочел бы иметь общее решение, которое работает независимо от того, какие URL-адреса выбраны для него.

ответ

2

Используйте другое место блока для каждого правила:

location ~ ^/[a-zA-Z0-9_]+/$ { 
    rewrite ^/([a-zA-Z0-9_]+)/$ /index.php?page=$1 last; 
} 

location ~ ^/[a-zA-Z0-9_]+.html$ { 
    rewrite ^/([a-zA-Z0-9_]+).html$ /index.php?page=$1 last; 
} 

location ~ ^/[a-zA-Z0-9_]+/[0-9]+/.*/[a-zA-Z0-9_]+$ { 
    rewrite ^/([a-zA-Z0-9_]+)/([0-9]+)/.*/([a-zA-Z0-9_]+)$ /index.php?page=$1&id=$2&sub=$3 last; 
} 

location ~ ^/[a-zA-Z0-9_]+/[0-9]+/.*$ { 
    rewrite ^/([a-zA-Z0-9_]+)/([0-9]+)/.*$ /index.php?page=$1&id=$2 last; 
} 

location = /index.php { 
    # your proxy rules here... 
} 

переписывает правил выше, используется последнего варианта, который объясняется в nginx docs:

last 
    stops processing the current set of ngx_http_rewrite_module 
    directives and starts a search for a new location matching the 
    changed URI; 
+0

работает как шарм , Спасибо! Я не пробовал использовать регулярное выражение в строке местоположения. – Sander

Смежные вопросы