У меня есть статический веб-сайт, разработанный на основном 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;
}
}
Спасибо!
Попробуйте эту конфигурацию:
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.
Я сам изучаю эту проблему - тем временем я обнаружил, что могу войти в систему, используя /blog/index.php/wp-admin/, а не / blog / wp-admin /
Это не является решением, а скорее паллиативом во время процесса перенастройки.