将特定参数重定向到子文件夹

时间:2013-04-26 16:53:39

标签: regex .htaccess mod-rewrite redirect rewrite

我一直在寻找一下,但不幸的是,当我遇到这个问题时,我仍然感到茫然,并且远离了.htaccess的老手,我一直无法找到解决方案。问题

该平台是Wordpress,但由于我确信这个问题可以通过.htaccess解决,我认为这不会产生太大影响。

我需要重写搜索,当它们变得更友好的URL结构时,不幸的是,只是改变?s = Test to / search / Test不会削减它。我需要从搜索中提取3个参数并将它们用作子文件夹,然后将剩余的参数追加到搜索的末尾。这是一个例子:

旧网址:

http://www.XXXXX.com/?s=Ford&z=59105&ci=Billings&st=MT&r=450&m=15000&pmin=1000&pmax=30000&status=Used&submit=Refine

新网址:

http://www.XXXXX.com/search/Used/MT/Billings/?s=Ford&z=59105&r=450&m=15000&pmin=1000&pmax=30000&submit=Refine

正如您所看到的,参数“status”,“st”和“ci”分别已插入到url中,后面跟着所有其余参数。

基本上,我需要将旧网址重定向到新网址,但是新网址会显示与旧网址对应的网页。

到目前为止,我已经写了以下内容:(编辑:*根据爆炸药丸*的建议将{QUERY_STRING}更改为[L,QSA])

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?search/([^/]+)/([^/]+)/([^/]+)/?s=([^/]+)?$ /index.php?s=$4&ci=$3&st=$2&status=$1 [L,QSA]

它有点有效;您可以输入新的URL并显示该页面,但似乎“Used”目录未正确发布数据。它也只是拼图的一半,因为它不会将旧URL重定向到新URL。它很简单,允许新的URL存在。

非常感谢你的帮助!这个让我难倒了好几天。现在

1 个答案:

答案 0 :(得分:1)

您可以在根目录下的一个.htaccess文件中尝试:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} s=([^&]+)&z=([^&]+)&r=([^&]+)&m=([^&]+)&pmin=([^&]+)&pmax=([^&]+)&submit=([^&]+) [NC]
RewriteCond %{REQUEST_URI}  !index\.php [NC]
RewriteRule ^search/([^/]+)/([^/]+)/([^/]+)   /index.php?s=%1&z=%2&ci=$3&st=$2&r=%3&m=%4&pmin=%5&pmax=%6&status=$1&submit=%7 [L,NC]

静默地映射:

http://www.XXXXX.com/search/Used/MT/Billings/?s=Ford&z=59105&r=450&m=15000&pmin=1000&pmax=30000&submit=Refine

http://www.XXXXX.com/index.php?s=Ford&z=59105&ci=Billings&st=MT&r=450&m=15000&pmin=1000&pmax=30000&status=Used&submit=Refine

对于永久重定向,将[L,NC]替换为[R = 301,L,NC]