Назад | Перейти на главную страницу

перезапись или внутренний цикл перенаправления при ошибке внутреннего перенаправления на Nginx

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

/var/www/name-of-virtual-host/
├── wp1
│   ├── wp-admin
│   ├── wp-content
│   └── wp-includes
└── wp2
    ├── wp-admin
    ├── wp-content
    └── wp-includes

Как видите, у меня две разные установки WordPress в разных папках. Итак, я пытаюсь создать правило перезаписи для работы с этими двумя WP.

Это определение моего местоположения:

        location / {
                try_files @missing $uri;
        }
        location @missing {
                rewrite ^/([a-z-])(/.*)$ /$1/index.php last;
        }
        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

Если URI / wp1 / постоянная ссылка-оф-сообщения / он должен использовать /wp1/index.php и если / wp2 / постоянная ссылка-сообщения / он должен использовать /wp2/index.php .

Но я получаю перезапись или внутренний цикл перенаправления при внутреннем перенаправлении на ошибка.

Как я могу написать свои правила перезаписи для использования с несколькими установками WP?

ОБНОВЛЕНИЕ 1

Пример файла WordPress .htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp1/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp1/index.php [L]
</IfModule>

# END WordPress

Разве ты не try_files в неправильном порядке? Возможно, это то, что вызывает у вас головную боль и бесконечные циклы, потому что файл @missing, ну, действительно отсутствует в вашей файловой системе, и перенаправление обратно на $uri в самом деле, обязательно должен вызвать бесконечный цикл?

-try_files @missing $uri;
+try_files $uri @missing;

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

Например, вероятно, было бы лучше иметь следующее, чем пытаться много переписывать и несколько перенаправлений:

location /wp1 {
    try_files $uri /wp1/index.php;
}
location /wp2 {
    try_files $uri /wp2/index.php;
}

Это сразу привлекает мое внимание:

rewrite ^/([a-z-])(/.*)$ /$1/index.php last;

$1 в этом случае соответствует только один символ.

Однако я не собираюсь углубляться в это. Вместо того, чтобы изобретать колесо заново, вам следует начать с рекомендованной конфигурации. Слишком много ловушек и уроков, чтобы выучить иначе. http://codex.wordpress.org/Nginx