2011-11-24 45 views
1

我真的很新.htaccess。我想知道如何为搜索字符串和选定的过滤器创建一个复杂的SEO友好的网址。.htaccess和seo友好搜索查询字符串

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

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

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

Short by: none,name,date + ASC,DESC。 分类: none,category ID。 搜索范围:全部,标题,信息,作者。

当所有的过滤器被选中我们的地址是;

原材料: www.site.com/?module=search & Q =测试& shortBy = name_ASC & CATID = 1 & Searchin的标题=

搜索引擎友好: www.site.com/搜索/测试/名称_ASC/1 /标题/

现在这并不复杂,但我只是想了解事情的工作方式。 即使没有被选中,我是否必须将所有过滤器应用到URL?这将创建更长的URL无缘无故,所以我相信必须有另一种方法。

如何在.htaccess中定义规则?正如我的例子,我至少在我的.htaccess文件中写入了两条规则(第二条是分页)。

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

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

+0

这个背后有一页吗?请求被提交给的'index.php'? –

回答

4

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

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

虽然下面的图案可以不显得优雅,它是在The Definitive Guide to Apache mod_rewrite

一个有特色的解决方案更多细节看apache docs或一些examples或本post

在任何情况下,我假设我请求转到index.php,所以你应该修改它以匹配实际页面。

此部分应该在顶部。所有3个选项

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

htaccess文件选项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] 

1选项

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

2选项

#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] 
+0

问题是这不是唯一的页面。我想去选择1.我可以处理空白参数,但我绝对不希望看到他们的URL像= =搜索/查询/ 4 /新闻'与选项1,如果是这样的话,它只是不会看起来很优雅。我会试一试非常感谢你。 – Revenant