2015-05-11 6 views
24

Я использую NGINX на своем выделенном сервере.NGINX - Return 301 vs Rewrite

Я вопрос, с возвращения и переписать 301.


Rewrite 301:

rewrite^http://xxx.xxxxx.net/xx-xxx/$request_uri? permanent; 

Возврат 301:

location ~ redirect-this/?$ { 
    return 301 http://xxx.xxxxx.net/xx-xxx/redirect-this$1; 
} 

Все перенаправлять правильно к URL запрошенной. Но ..

Что является более эффективным способом, чтобы сделать 301 редирект?

Я больше 200 URL для перенаправления. Итак, что вы рекомендуете?

+2

Этот вопрос немного сбивает с толку, так как вы сравниваете 'перепишем ^' (сопрягать ничего) с 'location ~ redirect-this /? $', который соответствует определенному регулярному выражению. Вы должны переформулировать это. Но в любом случае хороший вопрос ... Мне любопытно, какой из них быстрее 'rewrite ^/test' или' location ^/test' с if. – czerasz

ответ

22

Как указано в nginx pitfalls, вы должны использовать серверные блоки и операторы return, поскольку они намного быстрее, чем оценка RegEx через блоки location.

Поскольку вы заставляете правило перезаписи отправить 301 нет никакой разницы, когда речь идет о SEO, кстати ..

+1

Итак, что вы предлагаете на самом деле, верните 301 прямо в серверный блок? например, 'server {имя_сервера foo.com; return 301 http: // $ server_name $ request_uri; } '? – tutuDajuju

+6

@tutuDajuju Я бы предположил, что вы используете 'return 301 http: // $ host $ request_uri;' vs '$ server_name', так как это приведет к перенаправлению на первое определенное имя_сервера, противоположное хосту, в котором он был предназначен. – mbeacom