.htaccess - 动态重写的 URL 允许多个参数(如果存在)

标签 .htaccess mod-rewrite seo

我们已经为我们的电子商务应用构建了一个搜索模块,并试图构建 SEO 友好的页面。

下面的基本概念是有效的,但是当向我们的搜索添加额外的参数时,规则不再正常工作。

RewriteRule ^shop/([^/]*)/([^/]*)/([^/]*)/search/([^/]*)$ search.php?controller=$1&lang=$2&name=$3&search_keyword=$4 [L]

搜索示例,但在参数存在时还需要使用类别选择。 www.mysite.com/shop/lcd

目前这是有效的,但只支持 2 个类别集,因为我们有 2 个规则并且不使用搜索,问题是可能有多达 20 个类别集

RewriteRule ^shop/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ search.php?controller=$1&lang=$2&name=$3&categories=$4=$5 [L]
RewriteRule ^shop/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ search.php?controller=$1&lang=$2&name=$3&categories=$4=$5|$6=$7 [L]

www.mysite.com/shop/TV/Plasma+3D+Portable/(电视是主要类别,有 3 个子类别)

www.mysite.com/shop/TV/Plasma+3D+Portable/Computers/Mac+PC+Laptops+Tablets/ (计算机是主类,上面加4个子类)

这还需要与其他参数集一起使用 www.mysite.com/shop/TV/Plasma+3D+Portable/Computers/Mac+PC+Laptops+Tablets/manufacturers/brandA/brandB/brandC/

如果有人可以建议一种更好的方法来编写这些规则以支持所有这些额外的参数请求,我们将非常感谢您的意见。

最佳答案

这篇文章帮助我们解决了问题 .htaccess: GET variables are lost in rewrite

在我们的例子中,解决方案非常简单, Controller 语言和名称与搜索参数分开,然后 params=/$4 捕获其余的 URL,我们现在可以通过 PHP 展开和解析

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^shop/([^/]*)/([^/]*)/([^/]*)$ /search.php?controller=$1&lang=$2&name=$3 [QSA,L]    
RewriteRule ^shop/([^/]*)/([^/]*)/([^/]*)/(.*)$ /search.php?controller=$1&lang=$2&name=$3&params=/$4 [QSA,L]

关于.htaccess - 动态重写的 URL 允许多个参数(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21442575/

相关文章:

php - CodeIgniter 项目无法在基于 Linux 的远程服务器上运行

apache - 使用 .htaccess 重写 GET 查询字符串

apache - 使用 .htaccess 进行大规模 301 重定向

joomla 2.5 通过文章 id 获取 seo 链接

seo - Vaadin 14 Flow 和 SEO、PWA

php - 为什么这个 htaccess 文件在 wamp 服务器中不起作用

.htaccess - 如何在 https 站点中的特定文件夹上强制使用 http

.htaccess - 如何将 https ://www. example.com 重定向到 https ://example. com

php - 使用 htaccess 的 PHP 中的 SEO 友好 URL

apache - magento : some htaccess redirection doesn't work