【问题标题】:htaccess redirect rules, main folder and subfolders redirecthtaccess 重定向规则,主文件夹和子文件夹重定向
【发布时间】:2014-04-03 18:46:11
【问题描述】:

故事:我正在开发一个网站,它在主目录中有三个子文件夹,分别是 /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/c/)中搜索“hello world”之类的句子时,结果以以下格式返回: 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 规则来解决这个问题?

【问题讨论】:

    标签: .htaccess redirect directory


    【解决方案1】:

    您可以使用此规则进行 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]
    

    只需确保将其放在您现有的规则之前

    【讨论】:

    • 感谢您的回答,我在现有规则之前尝试了您的代码,但仍然没有运气。
    • 抱歉打错了,刚刚改正。再试一次。
    • 非常感谢您的帮助,工作正常。我再次感谢你。欢呼
    • 很高兴知道,您现在可以通过单击我的答案左上角的勾号将答案标记为已接受吗?
    【解决方案2】:

    您无法修复 .htaccess 中的问题。您需要修复您的应用程序,以便它为搜索结果生成正确的 URL。目前它在生成搜索结果时使用当前页面 URL,这就是为什么你会得到这样的结果。

    【讨论】:

    • 在我删除 /a/、/b/ 和 /c/ 子文件夹中的类似代码之前,结果以正确的格式返回,例如 site.com/a/hello-world/site.com /b/hello-world/site.com/c/hello-world/.
    • 好吧,在那种情况下,我认为 Apache 没有使用重定向规则,因为文件已经可用。问题出在生成搜索结果的实际代码中,看一下。
    猜你喜欢
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2017-09-08
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2021-06-13
    相关资源
    最近更新 更多