Magento 模块的 URL 重写

Posted

技术标签:

【中文标题】Magento 模块的 URL 重写【英文标题】:URL rewriting for Magento module 【发布时间】:2011-06-13 17:04:41 【问题描述】:

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

在文章控制器中,我有一个名为“存档”的操作,用于根据存档列出前端/网站上的文章。除了网址,一切都很好。

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

我真正需要的是http://mydemostore/article/archives/01/2011

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

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

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

来自

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

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

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

请帮助我如何通过使用这两种方式中的任何一种或两种方式来完成这项工作。

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

【问题讨论】:

【参考方案1】:

好吧,如果你有几个,你可能不会接受这个选项 模块中的控制器,但它是一个有效的解决方案 在您的 .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/

关于最初的问题,在 Magento 中保存编程 URL 重写将是最佳做法,但不一定 最实用或最快实施的;当然,Apache 指令(例如 .htaccess 或站点配置文件)将是最快的,但不是 最注重最佳实践。

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

.htaccess 中的类似内容

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

可能会删除重复项,但我不会选择它

更一般的重复情况:

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

【讨论】:

【参考方案4】:

我自己没有这样做,只是阅读了here,但这里是……

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

节点&lt;article_article_archives&gt; 没有严格格式,它只需要在其他重写中是唯一的。

【讨论】:

我对这个非 htaccess 选项很好奇...我认为这个 标签更侧重于重写和覆盖代码文件,对吧?不是网址路径?无论如何,这似乎不起作用。 再次查看问题,我认为更好的方法可能是为每个“月/年”页面发送save an URL rewrite。每年只有 12 次,这没什么可做的。 嗯,是的,我正在管理区域中使用 Magento 的自定义 URL 重写(您的链接的答案显示了如何以编程方式创建它们)。到目前为止没有运气,但我觉得它应该工作。谢谢! 我可以确认这在 Magento 1.9.1 中有效。这应该是公认的答案!

以上是关于Magento 模块的 URL 重写的主要内容,如果未能解决你的问题,请参考以下文章

新的 Magento1.13 EE URL 重写如何工作/新的数据库表如何相互关联?

网址重写导致 Magento 管理员无法访问

Magento 重复类重写

Magento 重写核心模型资源集合

没有 index.php,除主页外的 Magento URL 不起作用

Magento程序 URL 的Canonical标签布局使用