1

我一直在四处寻找,但不幸的是,当涉及到这个问题时,我仍然不知所措,而且与 .htaccess 的老手相去甚远,我一直无法找到解决问题的方法。

该平台是 Wordpress,但由于我确信可以使用 .htaccess 解决此问题,因此我认为这不会有太大的不同。

当搜索到更友好的 URL 结构时,我需要重写搜索,不幸的是,只是将 ?s=Test 更改为 /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 中,所有其余参数都在后面。

所以本质上,我需要将旧 url 重定向到新 url,但让新 url 显示与旧 url 对应的页面。

到目前为止,我已经写了以下内容:(EDIT : *Changed {QUERY_STRING} to [L,QSA] asSuggested by Explosion Pills*)

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

它有点工作;您可以输入新的 url,它会显示该页面,尽管“已使用”目录似乎没有正确发布数据。它也只是难题的一半,因为它不会将旧 URL 重定向到新 URL。它简单地允许新的 URL 存在。

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

4

1 回答 1

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]

于 2013-04-26T18:19:04.127 回答