我正在尝试为我的Magento搜索表单创建漂亮的网址,以便制作:
http://domain.com/catalogsearch/result/?q=KEYWORD
看起来像这样:
http://domain.com/search/KEYWORD
我写过这是我的htaccess文件:
RewriteRule ^search/([^/]+)/?$ /catalogsearch/result/?q=$1 [QSA,P,NC]
这很好用,当我输入http://domain.com/search/KEYWORD
时,它会显示结果。
但是...
我无法锻炼如何让我的搜索表单转到漂亮的格式网址,它仍然是原始的。
我的搜索表单目前是这样的:
<form id="search_form" action="http://domain.com/catalogsearch/result/" method="get">
<input id="search" type="search" name="q" value="KEYWORD" maxlength="128">
<button type="submit">search</button>
</form>
正确方向的任何一点都非常赞赏。
答案 0 :(得分:1)
这里有几件事情,所以让我尽力解释一下。
首先,你的主要问题是这个新的&#34;漂亮&#34;搜索网址。当<form>
与method="GET"
一起使用时,每个输入(即<input name="q">
)都会作为查询参数附加到表单的操作中(您将获得/search?q=foo
/search/foo
1}}而不是<form id="search_form" action="<?php echo Mage::getUrl('search'); ?>" method="GET">
)。
为了解决这个问题,你需要做两件事:
将表单标记更改为:
/search
这样可以确保将表单提交给/catalogsearch/result
而不是?q=foo
。 (不过,你仍会获得var form = document.getElementById('search_form'),
input = document.getElementById('search');
form.onsubmit = function() {
// navigate to the desired page
window.location = form.action + input.value;
// don't actually submit the form
return false;
};
,这将在#2中得到解决。)
添加一些JavaScript,劫持表单提交并形成所需的URL:
RewriteRule
这会帮助您启动并运行,但仍有一些其他问题需要解决。
使用基于P
的重写与Magento不起作用。我还没有弄清楚技术原因,但是我遇到了同样的问题。您的重写与RewriteRule
标志一起使用的原因是the P
flag turns the rewrite into a proxy request。这意味着您的网络服务器会使用新网址向自己发出另一个请求,这可以避免您遇到的典型RewriteRule
问题。
那么,如何在不使用RewriteRule
的情况下使用自定义漂亮网址?你使用Magento的内部重写逻辑! Magento通过其配置XML提供类似于<config>
<global>
<rewrite>
<some_unique_identifier>
<from><![CDATA[#/search/(.*)/?$#]]></from>
<to><![CDATA[/catalogsearch/result/index/q/$1/]]></to>
<complete />
</some_unique_identifier>
</rewrite>
</global>
</config>
的基于正则表达式的重写逻辑:
/search/foo
通过将该配置放在您的某个模块中,Magento将在内部将/catalogsearch/result/index/q/foo/
形式的请求重写为/
。请注意,您必须使用Magento的自定义参数结构(由/catalogsearch/result/index/
分隔的名称 - 值对),因为它在执行此内部重写后不会解析查询字符串参数。另请注意,您必须指定完整的模块 - 控制器 - 动作三重奏(q
),否则/search/foo
将被解释为动作名称,而不是参数名称。
这比使用代理请求要好得多,因为它不会发出辅助请求,并且重写发生在Magento的核心路由处理逻辑中。
这应该足以让你完全正确地运行在正确的道路上。但是,如果您有兴趣,可以进一步采取此一个步骤。
通过使用上述技术,您最终会得到三个搜索网址:/catalogsearch/result/?q=foo
,/catalogsearch/result/q/foo
和<link rel="canonical">
。这意味着每个搜索查询基本上有三个页面,所有页面都具有相同的内容。这对于SEO目的来说并不是很好。为了解决这个问题,您可以从后两个网址创建301永久重定向以重定向到您的漂亮网址,或者您可以使用{{1}}标记告诉搜索引擎您的漂亮网址是主要网址。
无论如何,我希望所有这些都能帮助你并使你走上正轨!