Мне нужно удалить подкаталог, который был продублирован в нескольких URL-адресах моего сайта с помощью постоянного перенаправления 301.
I ' m нужна помощь с настройкой Nginx.
Например:
http://example.com/foo/DIR/DIR/bar
-> http://example.com/foo/DIR/bar
location ~ ^(.*)/DIR/DIR(.*)$ {
rewrite ^(.*)$ /DIR/$1 last;
break;
}
Мой текущая конфигурация сервера nginx:
server {
listen 443 ssl http2 fastopen=500 reuseport;
listen [::]:443 ssl http2 fastopen=500 reuseport ipv6only=on;
server_name www.example.com;
resolver 1.1.1.1 1.0.0.1 valid=300s;
charset utf-8;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/nginx/snippets/diffie-hellman;
root /var/www/webdisk/example.com/htdocs;
autoindex off;
index load.php index.php index.html;
include /etc/nginx/snippets/security;
include /etc/nginx/snippets/expires;
include /etc/nginx/snippets/error_pages;
include /etc/nginx/snippets/pagespeed;
location ~ \.php$ {
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/run/php/php7-fpm.sock;
fastcgi_send_timeout 1200s;
fastcgi_read_timeout 1200s;
fastcgi_connect_timeout 75s;
}
# TODO: http://example.com/foo/DIR/DIR/bar --> http://example.com/foo/DIR/bar
location ~* ^/(.+)$ {
if (-f $document_root/public/prov/$1.html) {
rewrite ^(.+)$ /public/prov/$1.html last;
break;
}
if (!-e $request_filename){
rewrite ^(.+)$ /load.php?request=$1 last;
break;
}
}
}
Надеюсь, вы поможете мне понять, как следует выполнять такое перенаправление.
P.S.
После перенаправления оно должно быть обработано в соответствии с последней директивой PHP Framework. /load.php?request=$1
Спасибо.
Для перенаправления с ответом 301 необходимо использовать rewrite ... постоянный
или return 301 ...
.
Чтобы удалить часть URI, вам необходимо захватить те части URI как до, так и после удаляемой части - во многом аналогично регулярному выражению в вашем операторе location
.
Например:
rewrite ^(.*)/DIR/DIR(.*)$ $1/DIR$2 permanent;
Подробнее см. этот документ .