2013-07-21 5 views
0

Я хочу, чтобы перейти от этих рабочих правилNginx переписать некоторые правила соответствия не работают

location = /contact { 
    rewrite ^(.*)$ /index.php?v=contact last; break; 
} 

location = /terms { 
    rewrite ^(.*)$ /index.php?v=terms last; break; 
} 

location = /faq { 
    rewrite ^(.*)$ /index.php?v=faq last; break; 
} 

location = /twitter { 
    rewrite ^(.*)$ /index.php?v2=twitter last; break; 
} 

location = /facebook { 
    rewrite ^(.*)$ /index.php?v2=facebook last; break; 
} 

location = /login { 
    rewrite ^(.*)$ /index.php?v2=login last; break; 
} 

location = /privacy { 
    rewrite ^(.*)$ /index.php?v=privacy last; break; 
} 

к чему-то вроде этого

location/{ 
    try_files $uri $uri/ =404; 
    rewrite ^/(contact|privacy|terms|faq)$ /index.php?v=$1 last; 
    rewrite ^/(twitter|facebook|login)$ /index.php?v2=$1 last; break; 
} 

Но дело в том, что «контакт», "термины ',' privacy ',' twitter ',' facebook 'работают правильно, но страницы' privacy 'и' login 'выбрасывают ошибку 404.

Там нет других правил перезаписи с участием «логин» и «уединение»

+0

Предлагайте открытый журнал отладки, чтобы выяснить, след два 404 URL. – TroyCheng

+0

@TroyCheng 'open()«/usr/share/nginx/www/privacy »не удалось (2: Нет такого файла или каталога)' поэтому он просто не переписывается – user1612250

+0

Я имею в виду, когда открытая опция отладки вы можете проследить процесс перезаписи в error_log, таким образом вы можете знать, как он переписывает и где не так. – TroyCheng

ответ

1

На самом деле я не люблю ни один из методов, он может работать, но это на самом деле не лучший способ, чтобы написать его, так что позволяет попробуйте что-то другое.

location *~ ^/(contact|privacy|terms|faq)/?$ { 
    try_files $uri $uri/ /index.php?v=$1; 
} 
location *~ ^/(twitter|facebook|login)/?$ { 
    try_files $uri $uri/ /index.php?v2=$1; 
} 
location/{ 
    try_files $uri $uri/ /index.php; 
} 

о, и я никогда не слышал о last; break; это, вероятно, работает только потому, что Nginx игнорирует последнюю часть, это либо last или break,

+0

это не соответствует файлу конфигурации nginx, и это не самое лучшее решение, потому что в случае, если index.php недоступен, он запустит цикл перенаправления и выиграет ошибку 't throw (только после слишком большого количества переадресаций) И я считаю, что 'last;' и «перерыв»; mix используется потому, что 'last;' заставляет сценарий повторять и запускать php, «break»; завершает текущий раздел местоположения [http://stackoverflow.com/a/13981316/1612250](http://stackoverflow.com/a/13981316/1612250) – user1612250