.htaccess和seo友好的搜索查询字符串

时间:2011-11-24 11:27:21

标签: .htaccess mod-rewrite seo

我对.htaccess很新。我想知道如何为搜索字符串和选定的过滤器创建复杂的seo友好URL。

我正在使用以下代码进行搜索。

ReWriteRule ^search/(.*)/(.*)   ?module=search&q=$1&page=$2 [L]
ReWriteRule ^search/(.*)        ?module=search&q=$1 [L]

当谈到添加过滤器选项时,它开始成为一场噩梦。考虑使用以下过滤器;

简称:无,名称,日期+ ASC,DESC。 类别:无,类别ID。 搜索范围:全部,标题,消息,作者。

选择所有过滤器后,我们的地址为;

原始 www.site.com/?module=search&q=test&shortBy=name_ASC&catID=1&searchIn=title

Seo Friendly: www.site.com/search/test/name_ASC/1/title /

现在这根本不复杂,但我只是想了解事情是如何运作的。 我是否必须将所有过滤器应用于URL,即使它们未被选中?这将无缘无故地创建更长的URL,因此我认为必须有另一种方法。

如何在.htaccess中定义规则?在我的例子中,我在.htaccess文件中写了至少2个规则(第2个用于分页)。

我现在可以想到做这样的事情^search/(.*)/(.*) ?module=search&$1=$2 [L],但这看起来并不优雅。

如果你能解决这个问题,我会很高兴的。如果你能和我这样的.htaccess新手分享你的一些经验,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

将以下规则放在.htaccess文件的顶部(在您网站的根目录中),然后选择以下选项之一,根据您的需要进行修改,然后放入.htaccess文件中。

第一个选项将匹配大多数网址,不建议使用。第二个只会匹配5个目录的网址,但需要所有的参数,所以我推荐第3个。

虽然下面的图案可能看起来不太优雅,但它是The Definitive Guide to Apache mod_rewrite

中的特色解决方案

有关详细信息,请查看apache docs或部分examples或此post

在所有情况下,我假设请求都转到index.php,因此您应该修改它以匹配实际页面。

此部分应位于所有3个选项的.htaccess文件顶部

#for all 3 options these 2 lines should be at the top of the .htaccess file
RewriteEngine On
RewriteBase /

<强>选项1

#1 if all parameters are optional, and you page (index.php) can handle blank parameters use
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)/$ index.php?module=$1&q=$2&shortBy=$3&catID=$4&searchIn=$5 [L]

<强>选项2

#2 if all parameters are required use
RewriteRule ^([^/]+)/([^/]+)/([^/]+)?([^/]+)/([^/]+)/$ index.php?module=$1&q=$2&shortBy=$3&catID=$4&searchIn=$5 [L]

<强>选项3

#3 if the module is required and other parameters are optional, then this is better
RewriteCond %{REQUEST_URI} ^/(search|produce_detail|other_modules_here)/
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)/$ index.php?module=%1&q=$1&shortBy=$2&catID=$3&searchIn=$4 [L]