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

.htaccess和seo友好的搜索查询字符串,.htaccess,mod-rewrite,seo,.htaccess,Mod Rewrite,Seo,我对.htaccess真的很陌生。我想知道如何为搜索字符串和选定的过滤器创建一个复杂的seo友好URL 我目前正在使用以下代码进行搜索 ReWriteRule ^search/(.*)/(.*) ?module=search&q=$1&page=$2 [L] ReWriteRule ^search/(.*) ?module=search&q=$1 [L] 当涉及到添加过滤器选项时,它开始成为一场噩梦。考虑下面的过滤器; 缩写:无、名称、日期+ASC、描

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

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

ReWriteRule ^search/(.*)/(.*)   ?module=search&q=$1&page=$2 [L]
ReWriteRule ^search/(.*)        ?module=search&q=$1 [L]
当涉及到添加过滤器选项时,它开始成为一场噩梦。考虑下面的过滤器; 缩写:无、名称、日期+ASC、描述。 类别:无,类别ID。 搜索:全部、标题、消息、作者

当选择所有过滤器时,我们的地址将是

原始: www.site.com/?module=search&q=test&shortBy=name\u ASC&catID=1&searchIn=title

Seo友好:www.site.com/search/test/name\u ASC/1/title/

这一点都不复杂,但我只想了解事情是如何运作的。 我是否必须将所有筛选器应用于URL,即使它们未被选中?这会无缘无故地创建更长的URL,所以我相信必须有另一种方法来实现这一点

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

我现在所能想到的就是这样做^search/*/.*?module=search&$1=$2[L],但这看起来并不优雅


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

将下面的规则放在您网站根目录中.htaccess文件的顶部,然后选择下面的选项之一,根据您的需要对其进行修改,并将其放在.htaccess文件的后面

第一个选项将匹配大多数URL,因此不推荐使用。第二个将只匹配5个目录的URL,但需要所有参数,所以我推荐第三个

虽然下面的模式看起来可能并不优雅,但它是

有关更多详细信息,请查看或部分或此

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

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

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

选择2

选择3


将下面的规则放在站点根目录中.htaccess文件的顶部,然后选择下面的选项之一,根据需要进行修改,并将其放在.htaccess文件的后面

第一个选项将匹配大多数URL,因此不推荐使用。第二个将只匹配5个目录的URL,但需要所有参数,所以我推荐第三个

虽然下面的模式看起来可能并不优雅,但它是

有关更多详细信息,请查看或部分或此

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

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

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

选择2

选择3


请求提交到的例如index.php后面是否有一个页面?请求提交到的例如index.php后面是否有一个页面?问题是这不是唯一的页面。我想选择方案一。我可以处理空白参数,但我肯定不希望在URL like=search/query//4/news和选项1上看到它们。如果是这样,它看起来就不优雅了。我会试试的,非常感谢。问题是这不是唯一的一页。我想选择方案一。我可以处理空白参数,但我肯定不希望在URL like=search/query//4/news和选项1上看到它们。如果是这样,它看起来就不优雅了。我会试试的,非常感谢。
#2 if all parameters are required use
RewriteRule ^([^/]+)/([^/]+)/([^/]+)?([^/]+)/([^/]+)/$ index.php?module=$1&q=$2&shortBy=$3&catID=$4&searchIn=$5 [L]
#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]