故事:我正在开发一个网站,该网站在主目录中有三个子文件夹:/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/
)。当我在子文件夹页面(即 site.com/a/
、site.com/b/
和 site.com)中搜索类似“hello world”的句子时/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
规则可以解决此问题?
最佳答案
您可以使用此规则进行 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]
只需确保将其放置在现有规则之前
关于.htaccess - htaccess 重定向规则,主文件夹和子文件夹重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22134581/