Số lượt xem hoặc trang web khác nhau trong các thư mục con


29

Một khách hàng muốn cửa hàng nhiều cửa hàng của mình được thiết lập như thế này:

Đây là một ví dụ nhưng có thể có nhiều thư mục con khác nhau. Cách tiếp cận tốt nhất để xử lý các thư mục con khác nhau cho các lượt xem / trang web cửa hàng khác nhau là gì?

Tôi biết rằng một giải pháp là tạo các thư mục con được gọi de, env.v. và sao chép index.php và .htaccess vào các thư mục con tương ứng.

Cũng có thể có một số cách giải quyết (symlink cho index.php, cấu hình vhost thay vì sử dụng .htaccess) để giảm thiểu sao chép tệp nhưng tôi muốn tìm một giải pháp mà tôi không phải thực hiện bất kỳ thay đổi nào trong hệ thống tệp mà chỉ cần xử lý mọi thứ bằng cấu hình.


CẬP NHẬT

Chúng tôi đã xác minh với bộ phận hỗ trợ Doanh nghiệp rằng cách tốt nhất để thực hiện việc này là tạo các thư mục con.

Chúng tôi đã kết thúc việc đó như thế này:

  • Tạo một thư mục "ngôn ngữ"
  • Tạo một bản sao của index.php bên trong thư mục cùng với .htaccess và symlink được điều chỉnh vào các thư mục Magento (app /, lỗi /, ...)
  • Tạo các liên kết tượng trưng "de", "en", vv trong thư mục gốc Magento trỏ đến thư mục "ngôn ngữ thư mục"

Bằng cách này, chúng ta có thể thêm một ngôn ngữ mới bằng cách tạo một liên kết tượng trưng mới (ví dụ: "fr").


Chúng tôi chỉ làm điều này để thấy rằng trang web không thể tìm thấy bất kỳ sản phẩm hoặc danh mục nào (Magento 404 / không có tuyến đường đến trang). Bạn cũng gặp phải điều này?
snh_nl

Không xa như tôi nhớ, xin lỗi. Bạn đã tạo lại tất cả các chỉ mục?
Matthias Zeis

Chúng tôi sử dụng nginx và một bản cập nhật là cần thiết cho conf để làm cho nó hoạt động. Tôi sẽ cập nhật nhận xét của mình
snh_nl

Thêm 2 điều lạ. 1) / thanh toán trả về 404 và 2) trình chọn ngôn ngữ: nếu tôi nhấp vào tiếng Anh, sau đó nhấp vào tiếng Anh, chúng tôi thấy rằng uri tiếp tục thêm / en / en / en / etc .... bạn đã chọn làm url cơ sở nào? domain.com/en hoặc didi bạn giữ nó dưới dạng domain.com
snh_nl

Chúng tôi đã chọn domain.com/vi/.
Matthias Zeis

Câu trả lời:


18

Rất dễ dàng để phục vụ nhiều tên miền / đường dẫn dựa trên URL. Như đã đề cập, thiết lập dễ nhất (chỉ cấu hình) là có thể khi các core/storemã duy nhất có thể được sử dụng trong đường dẫn dưới dạng các thư mục con . Điều này đòi hỏi một trong những điều sau đây:

  1. Khách truy cập được liên kết với đường dẫn thư mục con chính xác ban đầu
  2. Khách truy cập được phục vụ một trang đích mà từ đó họ chọn cửa hàng của mình và nhận cookie
  3. Một số cơ chế được sử dụng để đặt loại chạy và chạy mã trước khi PHP xử lý phản hồi

Về # 3: kể từ 1.4 Magento, có thể cho phép máy chủ Web xác định bối cảnh đang chạy ( trang web hoặc cửa hàng ) cũng như mã cụ thể sẽ được sử dụng. Từ index.php :

/* Store or website code */
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';

/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

Mage::run($mageRunCode, $mageRunType);

Trong khi các biến môi trường được sử dụng để khởi tạo ứng dụng, có thể ảnh hưởng đến hệ thống trước khi PHP thậm chí quay vòng. Với Apache và mod_rewriteđiều này có thể được thực hiện cho các thư mục con với một chút mánh khóe:

RewriteCond %{REQUEST_URI} ^/de/$
RewriteRule .* - [E=MAGE_RUN_CODE:deutsch]
RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+)
RewriteRule .* - [E=MAGE_RUN_CODE:%1]

Apache rất khó hiểu với các biến môi trường và các thư mục con, như được thể hiện bằng câu trả lời SO xuất sắc này . Hai dòng ban đầu dẫn đến trong $_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch';khi hai dòng sau cung cấp cần thiết $_SERVER["MAGE_RUN_CODE"] = 'deutsch';. Có rất nhiều mánh khóe khác, nhưng những điều trên đã cắn tôi trước đây.

Mục tiêu cuối cùng phải được phát hiện ban đầu càng nhiều càng hợp lý (Geoip + mối quan tâm đa ngôn ngữ) trong khi khiến người dùng đặt cookie lưu trữ có thể được sử dụng để bỏ qua / bước qua logic trong các yêu cầu tiếp theo.


1
Cảm ơn, Ben. Làm theo cách này, tôi có thể khởi tạo lượt xem cửa hàng nhưng tôi luôn nhận được trang Magento 404 ("Rất tiếc, xấu của chúng tôi"). Tôi đặt URL cơ sở để domain1.org/en , domain.org/de và vân vân. URL da, URL phương tiện, v.v. được đặt thành domain.org/ (skin | media | ...) Xin lưu ý rằng các trang chính xác được trả về nếu tôi sử dụng phương pháp "copy index.php và .htaccess" thông thường.
Matthias Zeis

Tôi đã chấp nhận câu trả lời này vì nó gần nhất với những gì chúng tôi đã cố gắng thực hiện (ngay cả khi chúng tôi giải quyết nó một chút khác biệt cho các yêu cầu đặc biệt của chúng tôi).
Matthias Zeis

Thực sự ngạc nhiên khi cài đặt "Thêm mã cửa hàng vào URL" không hoạt động.
đánh dấu

Mã cửa hàng phải là duy nhất. Làm thế nào nó nên hoạt động với một số lượt xem cửa hàng tất cả kết thúc bằng de /, fr / hoặc en /?
Matthias Zeis

Tôi nghĩ rằng tôi đã bỏ lỡ các mã cửa hàng được sao chép, mặc dù tôi nghĩ rằng tôi đã giả sử một số cách viết lại dựa trên máy chủ Web (ví dụ mode_rewrite) dựa trên HTTP_HOST+ thư mục con cấp 1.
đánh dấu

9

Nếu các URL thụt lề (thư mục con) có thể có cùng tên như mã cửa hàng (tại sao không?), Bạn có thể chỉ cần kích hoạt Configuration > Web > Url options > Add Store Code to Urls.


Chính xác, sau đó bạn thậm chí sẽ không cần các thư mục con. miễn là việc viết lại url được bật, Magento sẽ biết rằng "en" là mã kho chứa và không tìm kiếm thư mục con.
Paul Grigoruta

8
Vấn đề với giải pháp này là, Magento chỉ cho phép một mã cửa hàng "de" trong bản cài đặt Magento. Vì vậy, nếu bạn có một số trang web với các ngôn ngữ mà bạn phải sử dụng storecodes khác nhau, ví dụ như de_de, de_en, ...
therouv

2
Rouven đã nhận nó. Vấn đề là bạn không thể có nhiều cửa hàng với cùng một mã cửa hàng.
Anna Völkl

Vâng, vấn đề là ở chỗ - như Rouven đã nói - bạn không thể có hai lượt xem cửa hàng bằng cùng một mã cửa hàng.
Matthias Zeis

Tôi xác nhận rằng Rouven đã làm đúng. Một lỗi đã được báo cáo cho Magento. Bởi vì trong những môi trường hiện đại với nhiều tầng hơn, điều này sẽ hoạt động. Tuy nhiên, bạn có nghĩ rằng có thể Add store codes to urlđặt cài đặt cài đặt số lần xem không? magento.stackexchange.com/questions/60686/ trên = giả sử có 1 đa diện với các miền sep, các cách sử dụng khác / en và / fr
snh_nl

3

chúng tôi cuối cùng đã làm chính xác điều đó

Chúng tôi đã xác minh với bộ phận hỗ trợ Doanh nghiệp rằng cách tốt nhất để thực hiện việc này là tạo các thư mục con.

Chúng tôi đã kết thúc việc đó như thế này:

  • Tạo một thư mục "ngôn ngữ"
  • Tạo một bản sao của index.php bên trong thư mục cùng với .htaccess và symlink được điều chỉnh vào các thư mục Magento (app /, lỗi /, ...)
  • Tạo các liên kết tượng trưng "de", "en", vv trong thư mục gốc Magento trỏ đến thư mục "ngôn ngữ thư mục"

Bằng cách này, chúng ta có thể thêm một ngôn ngữ mới bằng cách tạo một liên kết tượng trưng mới (ví dụ: "fr").

Trong phần phụ trợ, chúng tôi đặt cửa hàng base urlthànhdomain.com/en

Nếu bạn sử dụng nginx, một bản cập nhật là cần thiết để xử lý vị trí của bạn để xử lý index.php cũng trong thư mục con mới. Điều này cần phải được thực hiện cho mọi thư mục dịch mới


snh_nl Có cơ hội bạn giải thích 2 dòng cuối cùng của bạn có nghĩa là gì không? Tôi gặp vấn đề tương tự như bạn đã nói trước đây nhưng tôi không thể hiểu: Nếu bạn sử dụng nginx, một bản cập nhật là cần thiết để xử lý vị trí của bạn để xử lý index.php cũng trong thư mục con mới. Điều này cần phải được thực hiện cho mọi thư mục dịch mới. Tôi đang sử dụng nginx và tôi đang cố gắng làm như vậy. Cảm ơn
vbak

location @rewrite { rewrite /(../)? /$1index.php; }
snh_nl

2

Có một mục trong cơ sở kiến ​​thức Magento chính thức mô tả chính xác điều đó.

Trong trường hợp bạn đang làm việc với Apache, hãy đảm bảo tất cả các mục nhập Máy chủ ảo (cho mỗi tên miền) đang trỏ đến cùng một gốc tài liệu nơi cài đặt Magento của bạn nằm. Đó là cho nhiều tên miền.

Điều tiếp theo (và cuối cùng) là .htaccess trong cùng thư mục cài đặt Magento. .htaccess là một tệp cấu hình cấp thư mục mạnh mẽ, nơi bạn có thể đặt quy tắc hành động cho mỗi yêu cầu máy chủ. Vì vậy, bạn sẽ cần xử lý tất cả các hành động tên miền / thư mục (phụ) khác nhau ở đó và đặt các biến máy chủ chính xác mà Magento sử dụng ở giai đoạn khởi tạo.

Sau khi hoàn tất cấu hình máy chủ, bạn sẽ phải đặt các đường dẫn cơ sở khác nhau cho mỗi cửa hàng trong quản trị viên Magento (hệ thống - cấu hình - chung - web).

Vì vậy, hãy chắc chắn rằng bạn làm theo hướng dẫn chính thức (cũng là cách ưa thích) và mọi thứ sẽ hoạt động trơn tru.


1
Câu hỏi không phải là về nhiều lĩnh vực.
Fabian Schmengler

Câu hỏi là về thiết lập nhiều tầng với NHIỀU TÊN MIỀN (.org và .ch là các miền khác nhau). Mặc dù không phải là vấn đề, bởi vì câu trả lời được cung cấp mô tả một giải pháp cho thiết lập nhiều trang bất kể bạn có nhiều tên miền, tên miền phụ hay chỉ các thư mục con khác nhau cho mỗi cửa hàng của bạn.
Jernej Golja

1
Nhưng trọng tâm là các đường dẫn cho các lượt xem cửa hàng, có vẻ như các tên miền không phải là vấn đề. Dù sao, sau khi chỉnh sửa của bạn, tôi đã thay đổi phiếu bầu của tôi.
Fabian Schmengler

1
Chính xác, vấn đề không phải là sử dụng nhiều tên miền mà một số cửa hàng phải chia sẻ cùng một đường dẫn / "thư mục con" không thể thực hiện được bằng cách thêm mã cửa hàng vào URL.
Matthias Zeis

-2

Trước tiên, bạn phải thực hiện một số cấu hình trong bảng quản trị Magento, sau đó tạo thư mục con và di chuyển index.php và .htaccess sang thư mục con và thực hiện một số thay đổi nhỏ đối với index.php.

Dưới đây là một ví dụ đầy đủ về cách làm điều này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.