故事:我正在开发一个网站,在主目录中有三个子文件夹为/ a /,/ b /和/ c /。 site.com,site.com / a /,site.com / b /和site.com/c/中的内容不同;但是,代码和文件完全相似。为了减少代码的数量,我使用了以下.htaccess规则并删除了/ a /,/ b /和/ c /子文件夹中的类似代码:
RewriteRule ^(a|b|c)/(.*) $2?folder=$1 [L,QSA]
一切正常,但下面是唯一的问题。
问题:我在所有四个页面的菜单栏中都有一个搜索按钮(例如site.com
,site.com/a/
,site.com/b/
和site.com/c/
)。当我搜索像#34; hello world"在子文件夹页面(即site.com/a/
,site.com/b/
和site.com/c/
)中,结果将按以下格式返回:
site.com/hello-world/?folder=a
site.com/hello-world/?folder=b
site.com/hello-world/?folder=c
但是,上面的搜索结果必须以下面的格式返回:
site.com/a/hello-world/
site.com/b/hello-world/
site.com/c/hello-world/
是否有.htaccess
规则来解决此问题?
答案 0 :(得分:2)
您可以使用此规则301重定向site.com/hello-world/?folder=c
=> site.com/a/hello-world/
RewriteCond %{THE_REQUEST} \s/+([^?]+)\?folder=([^\s&]+) [NC]
RewriteRule ^ /%2/%1? [R=301,L,NE]
只需确保将放在现有规则之前
答案 1 :(得分:1)
您无法解决.htaccess中的问题。您需要修复应用程序,以便为搜索结果生成正确的URL。目前,它在生成搜索结果时使用当前页面URL,这就是您得到类似结果的原因。