2017-05-21 36 views
7

Tôi đang cố gắng khắc phục vấn đề với chuyển hướng 301 và htaccess. Tôi đã di chuyển một trang web từ miền cũ sang tên miền mới. Và tôi đã thành công trong việc thực hiện điều này với chuyển hướng 301. Như vậy:Danh mục dải gốc từ url

Redirect 301/https://newdomain.com 

Trên loại trang web con cũ url là như vậy:

olddomain.com/product-category/parent-cat1/parent-cat2/child-cat 

hoặc

olddomain.com/product-category/parent-cat1/child-cat 

hoặc

olddomain.com/product-category/child-cat 

Trong khi trên trang web mới mà họ là:

newdomain.com/product-category/child-cat 

Thật không may, điều này dẫn đến 404 từ chuyển hướng. Có cách nào để loại bỏ các loại phụ huynh (có thể thay đổi theo tên và số lượng của họ) từ url?

Cảm ơn trước cho lời khuyên nào, cheers

+1

"'/parent-cat/parent-cat/'" - Hai trường hợp này có phải là "parent-cat' không? Hoặc đó thực sự là '/ parent-cat1/parent-cat2 /'? Bạn nói số 'cha mẹ-mèo' có thể thay đổi ... từ 1 đến bao nhiêu? Các ký tự nào là một phần của 'product-category' và' child-cat'? – MrWhite

+0

Xin lỗi vì không rõ ràng hơn. Không, họ sẽ là các danh mục cha mẹ khác nhau. Tôi sẽ chỉnh sửa câu hỏi để làm rõ điều này. Không có giới hạn nào về việc các danh mục sản phẩm có thể được lồng nhau đến mức nào, nhưng thực tế việc nói nó không quá 5 hoặc 6 cấp. Ký tự chữ và số và dấu gạch nối.Cảm ơn – noelmcg

Trả lời

6

Cố gắng bao gồm RedirectMatch chỉ sau trước hiện Redirect chỉ thị của bạn:

RedirectMatch 302 ^/([\w-]+)/(?:[\w-]+/)+([\w-]+)$ https://newdomain.com/$1/$2 

Chỉ thị RedirectMatch là bổ sung cho các chỉ thị Redirect, cả hai phần của mod_alias. Ngoại trừ chỉ thị RedirectMatch sử dụng regex để khớp với đường dẫn URL, trong khi Redirect sử dụng kết hợp tiền tố đơn giản.

này giả định rằng các phân đoạn đường dẫn (tức là. "Sản phẩm thể loại", "mẹ-con mèo" và "con mèo") bao gồm chỉ các nhân vật a-z, A-Z, 0-9, _- (gạch nối). Điều này cần phải cụ thể nhất có thể để không khớp với "quá nhiều". Một hoặc nhiều "cha mẹ-mèo" là bắt buộc.

$1 là sự phản hồi cho nhóm được chụp đầu tiên trong mẫu . I E. ([\w-]+), loại sản phẩm. Và $2 là một backreference cho nhóm thứ hai bị bắt, tức là. ([\w-]+) ở cuối mẫu , con mèo. Các "(?:....)" nhóm "ở giữa là một nhóm không bắt, vì vậy không có backreference áp dụng cho điều này.

Đây là chuyển hướng 302 (tạm thời). Thay đổi nó thành 301 chỉ khi nó hoạt động OK. Nó dễ dàng hơn để kiểm tra với 302 vì chúng không được trình duyệt lưu trữ. Do đó, bạn cần đảm bảo bộ nhớ cache của trình duyệt của bạn rõ ràng trước khi thử nghiệm.

+1

Cảm ơn @ user82217. Chúc mừng những người đứng đầu lên đến 302, không bao giờ biết điều đó. Dường như nó hoạt động tốt tại thời điểm này chỉ cần thử nghiệm thêm một chút. – noelmcg

+0

Để làm phức tạp vấn đề, tôi không bao giờ đề cập rằng trang web nằm trong thư mục con, nhưng điều này dường như hoạt động: RedirectMatch 302 ^/sub-dir/([\ w -] +)/(?: [\ W -] + /) + ([\ w -] +) $ https://newdomain.com/$1/$2 – noelmcg

+0

Điều đó là đủ nếu trang web nằm trong thư mục phụ. Vì vậy, có lẽ chỉ thị 'Chuyển hướng 'hiện tại của bạn thực sự giống như:' Chuyển hướng 301/subdir https: // newdomain.com'? – MrWhite

Các vấn đề liên quan