Мультимагазин Prestashop и многоязычный URL переписаны

Настройка Prestashop с функциональностью мультимагазина вместе с многоязычной поддержкой. Это означает, что Prestashop по умолчанию определил бы мой URL как:

domain.com/store/lang => domain.com/uk/ja   (UK store with Japanese language)

Однако я был бы очень признателен за то, чтобы мои URL-адреса имели и магазин, и язык на одном уровне:

domain.com/store-lang => domain.com/uk-ja

Я понял, что это возможно через .htaccess или файл dispatch.php. Однако, похоже, он не работает. И я также был бы признателен за решение, в котором оно не слишком хакерское и во многих местах закодировано.

Я надеюсь, что кто-то, возможно, пробовал это раньше или, возможно, мог придумать какое-либо возможное решение :)

Нет правильного ответа

Мы не придумали никакого решения этой проблемы. Я собираюсь реализовать приложение с /store/language и надеюсь, что это не повлияет на пользователя или SEO. Я решил принять ответ ниже, хотя на самом деле он не работает. Однако это был единственный ответ и действительно полезный.


person Jafu    schedule 15.11.2012    source источник


Ответы (1)


Вам нужно сделать правило перезаписи

посмотрите http://www.presto-changeo.com/en/content/6-prestashopseotipshttp://www.webshopstarter.com/shoppingcarts/prestashop-seo-friendly-urls/)

и добавить:

RewriteRule ^(\w+)-(.*) $1/$2 [QSA,L,R=301]
person Community    schedule 16.11.2012
comment
Спасибо. Итак, вы говорите, что на самом деле было бы лучшим решением сохранить /store/language? И не использовать /store-language? Например, Apple => store.apple.com/hk-zh и store.apple.com/hk в одной стране, но на другом языке. Я не думаю, что Google предпочитает этот язык. И я бы не добавлял в URL дополнительные уровни, например, /store/uk/ja, тогда просто /uk/ja. - person Jafu; 17.11.2012
comment
если у вас есть только GET (?sth=1), вы можете использовать QSA. Это также отправит данные. RewriteRule ^(\w+)-(\w+) $1/$2 [L,QSA] - person androbin; 17.11.2012
comment
Спасибо за ответ. Я отредактировал свой вопрос с текущим файлом .htaccess. Ссылки, на которые вы ссылаетесь, тоже немного устарели, и Prestashop теперь автоматически генерирует htaccess. Во всяком случае, я пытался вставить ваше RewriteRule, но не могу понять, где оно должно быть и как оно будет работать. Вы знаете, что я хочу, чтобы URL из: /uk/en стал /uk-en, верно? Спасибо большое. - person Jafu; 18.11.2012
comment
попробуйте добавить RewriteCond %{HTTP_HOST} ^localhost:8888$ RewriteRule ^(\w+)-(.*) $1/$2 [QSA,L,R=301] сразу после включения RewriteEngine вручную, затем попробуйте просмотреть http://localhost:8888/uk-en затем конечно лучше поставить преташопный конфиг (его надо выложить вместе со сгенерированным .htaccess) - person ; 18.11.2012
comment
Это не работает. Меня перенаправляют обратно в /uk/en/, однако теперь он переходит прямо на страницу, не найденную (Prestashop 404). - person Jafu; 19.11.2012
comment
На самом деле, похоже, вы неправильно поняли, чего я хочу. Ваша настройка, вероятно, сработает, однако она перенаправляет меня обратно на /uk/en, и я хотел, чтобы URL-адрес был /uk-en/ - и оставался таким. - person Jafu; 19.11.2012
comment
когда вы помещаете rewriteRule ^(\w+)-(.*) $1/$2, если вы вводите localhost/foo-bar в своем браузере, он остается таким, но сервер будет получать ресурс, расположенный по адресу localhost/foo/bar, если это не работает, то, вероятно, у вас есть другое правило, вы можете попробовать это, только если это возможно - person ; 19.11.2012
comment
Спасибо. Я понял, что перенаправляет код, сокращая .htaccess только до вашего предложения. Правило перезаписи, кажется, работает нормально /foo-bar становится /foo/bar, однако я все еще не могу заставить его работать. Похоже, что Prestashop перехватывает запрос в свой класс Dispatch.php, вызывая dispatch(). Ссылка на код здесь: phpkode. com/source/p/prestashop-e-commerce-solution/prestashop/ — здесь Prestashop считает, что мой запрос все еще /foo-bar/. Обновлен мой вопрос с обновленным файлом .htaccess. - person Jafu; 19.11.2012
comment
да, он передается диспетчеру, лучше всего сделать так, чтобы это преобразование URL-адресов работало с правилами диспетчера, или, возможно, попробуйте RewriteBase /pretashop/ RewriteRule ^(\w+)-(.*) $1/$2 - person ; 19.11.2012
comment
Извините, это тоже не сработало. Я все еще попадаю в Диспетчер.. Раздражает, но кажется, что изменить такую ​​​​вещь немного сложнее. Судя по всему, он действительно глубоко интегрирован в косые черты. - person Jafu; 20.11.2012
comment
вам нужно опубликовать свои правила диспетчера (что генерирует htaccess) - person ; 20.11.2012
comment
Диспетчер точно ничего не создает в .htaccess, а если бы и создал, то чем бы это помогло? Мы уже пытались редактировать файл .htaccess. Однако все содержимое класса Dispatch.php находится в моем предыдущем комментарии (ссылка). Более конкретно это в функции отправки. Как вы думаете? - person Jafu; 20.11.2012
comment
Я принял ваш ответ, хотя он не работает. Смотрите мое последнее редактирование моего вопроса :) спасибо. - person Jafu; 21.11.2012