Ядро правил Nginx Rewrite PHP + Wordpress | Не могу войти в панель WP-Admin

У меня есть статический веб-сайт, разработанный на ядре PHP (фреймворк не используется), и я также установил блог, используя wordpress в подкаталоге того же домена.

Like : example.com/blog

Поскольку основной сайт построен с использованием статических файлов php, в соответствии с рекомендациями SEO, я написал простое правило перезаписи для удаления расширения .php из URL.

Итак,

http://example.com/abc.php will rewrite to http://example.com/abc

Теперь переходим к актуальной проблеме.

Когда я пытаюсь войти в http://example.com/blog/wp-admin и вводить имя пользователя и пароль, он перенаправляет wp-login.php, но из-за приведенного выше правила перезаписи он изменяется на wp-login и вызывает перенаправление страницы 404, не найденной на основном сайте.

Правило перезаписи Nginx vhost-conf:

location ~ \.php$ {
    if ($request_uri ~ (.*)\.php$) {
        return 301 $1;
    }

    try_files $uri =404;

    expires off;

    fastcgi_read_timeout 900s;
    fastcgi_index index.php;
    fastcgi_intercept_errors on;
    fastcgi_pass 127.0.0.1:9001;

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

Мой вопрос в том, как я могу исключить wp-admin из такого перенаправления? или кто-то может предложить какое-либо альтернативное хорошее правило перенаправления / перезаписи, чтобы избежать такой коллизии?

Завершите конфигурацию Nginx:

server {
    listen 80; # Default listen port
    if ($host = www.example.com) {
        rewrite ^/(.*)$ http://example.com/$1 permanent;
    }
    server_name example.com www.example.com;
    root  /home/example.com/public_html/;
    index index.php index.html;
    access_log /var/log/nginx/skpat77-access.log;
    error_log /var/log/nginx/skpat77-error.log;
    gzip on; # Turn on gZip
    gzip_static on;
    gzip_comp_level 9;
    gzip_min_length  1400;
    gzip_vary  on;
    gzip_types  text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    try_files $uri $uri/ /index.php?$args;


    #error 500 502 503
    error_page 500 502 503 /500x.html;
    location = /500x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        if ($request_uri ~ (.*)\.php$) {
            return 301 $1;
        }

        try_files $uri =404;

        expires off;

        fastcgi_read_timeout 900s;
        fastcgi_index index.php;
        fastcgi_intercept_errors on;
        fastcgi_pass 127.0.0.1:9001;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    location /blog/ {
        index index.php index.html index.htm;
        try_files $uri $uri/ /blog/index.php;
    }
}

Спасибо!

1
задан 5 August 2016 в 11:58
2 ответа

Попробуйте эту конфигурацию:

server {
    # Handle redirects to www.example.com
    server_name example.com;
    return 301 http://www.example.com$uri;
}

server {
    listen 80; # Default listen port
    server_name www.example.com;
    root  /home/example.com/public_html/;
    index index.php index.html;
    access_log /var/log/nginx/skpat77-access.log;
    error_log /var/log/nginx/skpat77-error.log;
    gzip on; # Turn on gZip
    gzip_static on;
    gzip_comp_level 9;
    gzip_min_length  1400;
    gzip_vary  on;
    gzip_types  text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    # Add .php extension to list of files to go through before trying WP
    try_files $uri $uri.php $uri/ /index.php?$args;


    #error 500 502 503
    error_page 500 502 503 /500x.html;
    location = /500x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        if ($request_uri ~ (.*)\.php$) {
            return 301 $1;
        }

        try_files $uri =404;

        expires off;

        fastcgi_read_timeout 900s;
        fastcgi_index index.php;
        fastcgi_intercept_errors on;
        fastcgi_pass 127.0.0.1:9001;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    location /blog/ {
        index index.php index.html index.htm;
        try_files $uri $uri.php $uri/ /blog/index.php;
    }
}

Однако проблема с этим подходом состоит в том, что могут быть другие побочные эффекты. Я рекомендую вам использовать необработанные файлы .php с расширением или реализовать аналогичную дружественную систему URL-адресов, как в Wordpress, в ваших собственных необработанных файлах PHP.

Или, что еще лучше, реализовать свои собственные файлы PHP в WP.

1
ответ дан 3 December 2019 в 23:43

Я сам разбираюсь в этой проблеме - тем временем я обнаружил, что могу войти в систему, используя /blog/index.php/wp-admin/, а не / blog / wp-admin /

Это не является решением, а скорее паллиативом во время процесса перенастройки

0
ответ дан 3 December 2019 в 23:43

Теги

Похожие вопросы