Linux
在 Nginx 中使用重定向 301 刪除重複的 url 子目錄
我必須通過永久重定向 301 刪除在我網站的多個 URL 中重複的子目錄。
我需要有關 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; } } }
我希望你能幫助我,了解這種重定向應該如何完成。
PS 重定向後,必須在針對 PHP 框架的最新指令下進行處理。
/load.php?request=$1
謝謝你。
要使用 301 響應重定向,您需要使用
rewrite...permanent
orreturn 301 ...
。要刪除 URI 的一部分,您需要在要刪除的部分之前和之後擷取 URI 的那些部分 - 很像
location
語句中的正則表達式。例如:
rewrite ^(.*)/DIR/DIR(.*)$ $1/DIR$2 permanent;
有關詳細資訊,請參閱此文件。