我对.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新手分享你的一些经验,我将不胜感激。
答案 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]