Php Magento模块的URL重写

Php Magento模块的URL重写,php,magento,module,url-rewriting,zend-route,Php,Magento,Module,Url Rewriting,Zend Route,我在Magento中创建了一个新模块,并将其命名为“article”。它有两个前端控制器索引和文章 在article controller中,我有一个名为“归档”的操作,根据归档在前端/网站上列出文章。除了URL,一切都很好 目前的工作URL是:[http://]mydemostore/article/article/archives/01/2011 我真正需要的是 我不想有额外的“文章”(控制器名称) 我知道,因为我的模块名和控制器名是相同的,所以我得到了这个。如果我将我的操作放在indexc

我在Magento中创建了一个新模块,并将其命名为“article”。它有两个前端控制器索引和文章

在article controller中,我有一个名为“归档”的操作,根据归档在前端/网站上列出文章。除了URL,一切都很好

目前的工作URL是:[http://]mydemostore/article/article/archives/01/2011

我真正需要的是

我不想有额外的“文章”(控制器名称)

我知道,因为我的模块名和控制器名是相同的,所以我得到了这个。如果我将我的操作放在indexcontroller中,我就会完成这项工作。但它不起作用

所以我现在需要的是,我不想将我的操作从“文章”移动到“索引”控制器,而只是想更改

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

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

在.htaccess文件上使用Zend路由或基本PHP URL重写

请帮助我如何使用这两种方法中的一种或两种方法来完成这项工作


非常感谢您提前检查我的问题

我自己并没有做过,只是读了一下,但现在

在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>


节点
的格式不是严格的,它只需要与其他重写不同。

类似于.htaccess中的内容

RewriteEngine On
RewriteRule ^(article/)* article/ [L]
可能会删除重复项,但我不会选择它

对于重复项,更一般的情况是:

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

嗯,如果您的模块中有多个控制器,您可能不会接受此选项,但这是一个有效的解决方案,无需在.htaccess等中创建额外的重写规则。可以使用IndexController.php而不是ArticleController.php设置“articles”模块。然后您可以使用[http://]mydemostore/article/archives/01/2011….访问这些页面。。。。其中ArchiveAction()是IndexController.php中的一个方法。Magento会自动将IndexController.php映射到/yourmod/index/或只是简单地映射到/yourmod/


好吧,如果你有几个选择,你可能不会接受这个选择 模块中的控制器,但它是一个没有 在.htaccess等中创建额外的重写规则是可能的 使用IndexController.php设置“articles”模块 一个ArticleController.php的。然后,您可以使用 [http://]mydemostore/article/archives/01/2011。。。。哪里 ArchiveAction()是IndexController.php中的一个方法。马根托 自动将IndexController.php映射到/yourmod/index/或 只需/yourmod/


不幸的是,
mydemostore/article/archives/01/2011
不会引用
IndexController->archivesAction
,而是
archivesController->01Action
这将导致错误,因为PHP中的方法/函数只能以下划线或字母开头

但是,以下URL将引用提到的控制器操作对:

  • mydemostore/文章/索引/档案/
  • mydemostore/文章//存档/
关于最初的问题,在
Magento
中保存编程URL重写将是最佳实践,但不一定 最实际或最快的实施方式;当然,Apache指令(例如htaccess或site conf文件)将是最快的,但不是最快的
最善于观察最佳实践。

我对这个非htaccess选项很好奇。。。我认为这个标签更关注于重写和重写代码文件,对吗?不是url路径?无论如何,这似乎不起作用。再看看这个问题,我认为更好的方法可能是为每个“月/年”页面设置。每年只有12个,这不是很多事情要做。嗯,是的,我在管理区玩Magento的自定义Url重写(你的链接的答案显示了如何通过编程创建它们)。到目前为止还不走运,但我觉得应该行得通。谢谢我可以在Magento 1.9.1中确认这一点。这应该是公认的答案!