Перезапись URL для модуля Magento - PullRequest
4 голосов
/ 22 января 2011

Я создал новый модуль в Magento и назвал его «article». Он имеет два внешних контроллера и артикул.

И в контроллере статей у меня есть действие, называемое «архивы», чтобы вывести список статей на интерфейс / веб-сайт на основе архивов. Все хорошо, кроме URL.

Рабочий URL сейчас: [http://]mydemostore/article/article/archives/01/2011

Что мне действительно нужно, так это http://mydemostore/article/archives/01/2011

Я не хочу иметь дополнительную «статью» (имя контроллера)

Я знаю, так как мои имя модуля и имя контроллера совпадают, я получаю это. Если бы я поместил свои действия в indexcontroller, я бы сделал это. Но это не сработало.

Итак, что мне сейчас нужно, так это то, что я не хочу перемещать свои действия с контроллеров «article» на «index», а просто хочу изменить

от

[http://]mydemostore/article/article/archives/01/2011 до

до

[http://]mydemostore/article/archives/01/2011

с использованием Zend-маршрутизации или базового переписывания URL-адреса PHP в файле .htaccess.

Пожалуйста, помогите мне, как сделать это, используя любой из этих двух способов или оба способа.

Заранее большое спасибо за проверку моего вопроса !!!

Ответы [ 4 ]

3 голосов
/ 22 января 2011

Я сам этого не делал, только прочитал об этом здесь , но здесь идет ...

В вашем файле config.xml:

<config>
    <global>
        <rewrite>
            <article_article_archives>
                <from><![CDATA[#^/article/archives/#]]></from>
                <to><![CDATA[/article/article/archives/]]></to>
            </article_article_archives>
        </rewrite>
    </global>
</config>

Узел <article_article_archives> не является строго сформированным, он должен быть уникальным только среди других перезаписей.

0 голосов
/ 30 мая 2012

Ну, возможно, вы не будете открыты для этой опции, если у вас есть несколько контроллеров в вашем модуле, но это допустимое решение без создания дополнительных правил перезаписи в вашем .htaccess и т. Д. Можно установить "«Статьи» с IndexController.php вместо ArticleController.php.Затем вы можете получить доступ к страницам с помощью [http://]mydemostore/article/archives/01/2011...., где archivesAction () - это метод в IndexController.php.Magento автоматически отображает IndexController.php в / yourmod / index / или просто /yourmod/.


К сожалению, mydemostore/article/archives/01/2011 НЕ будет ссылаться на IndexController->archivesAction, но archivesController->01Actionчто приведет к ошибке, поскольку метод / функция в PHP может начинаться только с подчеркивания или буквы.

Однако следующие URL будут ссылаться на указанную пару контроллер-действие:

  • mydemostore / article / index / archives /
  • mydemostore / article // archives /

Что касается исходного вопроса, сохранение программных перезаписей URL в пределах Magento было бы наилучшей практикой., но не обязательно самый практичный или самый быстрый для реализации;Конечно, директивы Apache (например, .htaccess или файлы conf сайта) будут самыми быстрыми, но не самыми наблюдательными из лучших практик.

0 голосов
/ 04 февраля 2011

Что ж, возможно, вы не будете открыты для этой опции, если у вас есть несколько контроллеров в вашем модуле, но это допустимое решение без создания дополнительных правил перезаписи в вашем .htaccess и т. Д. Можно установить ваш модуль "Articles"с IndexController.php вместо ArticleController.php.Затем вы можете получить доступ к страницам с помощью [http://]mydemostore/article/archives/01/2011...., где archivesAction () - это метод в IndexController.php.Magento автоматически отображает IndexController.php в / yourmod / index / или просто /yourmod/.

0 голосов
/ 22 января 2011

Примерно так в .htaccess

RewriteEngine On
RewriteRule ^(article/)* article/ [L]

Может удалить дубликаты, но я бы не стал выбирать

Более общий случай для дубликатов:

RewriteEngine On
RewriteRule ^([^/]+/)* $1 [L]
...