【问题标题】:Redirecting anything in a subdirectory to an absolute directory path将子目录中的任何内容重定向到绝对目录路径
【发布时间】:2016-10-05 19:07:27
【问题描述】:

使用 RewriteRule 我试图将子目录中的每个 url 作为绝对路径重定向到另一个子目录,修剪第一个目录之后的任何内容。示例:

www.domain.com/store/search
www.domain.com/store/search?search=some_term

等等

都需要去

www.domain.com/newdir/

不幸的是,我看到的结果是这样的:

www.domain.com/store/newdir/
www.domain.com/store/newdir/?search=some_term

等等。我目前正在使用这个命令:

重写引擎开启
RewriteRule search(.*) newdir/ [R=301,NC,L]

如何将 /store/search 中的任何内容重定向到仅 /newdir,修剪“search”一词之后的任何内容?谢谢。

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    如果 .htaccess 在根目录中,你可以这样做

    RewriteEngine on
    RewriteRule ^store/search(.*)?$ ./newdir/$1 [R=301,NC,L]
    

    或者,如果 .htaccess 在“存储”目录中,您可以这样做...

    RewriteEngine on
    RewriteRule ^search(.*)?$ http://www.domain.com/newdir/$1 [R=301,NC,L]
    

    以上是保留查询字符串,如果只想重定向到目录去掉$1

    【讨论】:

    • 谢谢 sdexp。实际上,我在两个目录中都有一个 .htaccess,root 和“store”。我把你的建议都放在了两者中,不幸的是,尽管删除了 $1,但仍然得到包含查询的结果:domain.com/store/newdir/?search=some_term 也许我犯了一个错误。以下是我添加的规则:
      **Store Dir .htaccess:**
      RewriteRule ^search(.*)?$ domain.com/newdir [R=301,NC,L] Root Dir .htaccess : RewriteRule ^store/search(.*)?$ ./newdir/ [R=301,NC,L]
    • 尝试将其更改为RewriteRule ^store/search(.*)?$ http://www\.domain\.com/newdir/ [NC,L,R=301]。另外,有时我会说如果您设置了规则,它可以保留在浏览器的缓存中,因此我的建议是清除缓存,重新打开浏览器或尝试使用其他浏览器仔细检查重定向是否在您的缓存与否。
    • 并且不要在两个目录中有重复的规则。选择一个并从另一个 .htaccess 中删除规则
    • 嗨,sdexp,我想我们越来越近了。您建议的规则让我进入正确的登录页面。查询仍然存在,但登录页面会忽略它。我将它保存在 /store/ 目录中 RewriteRule ^search(.*)?$ domain.com/newdir [NC,L,R=301] 并且 URL 示例被重定向到 @987654324 @_。附带说明一下,没有查询的 _www.domain.com/store/search 可以完美运行。查询被忽略,所以它正在工作,只是希望我可以删除查询。谢谢!
    • @micah-sharp RewriteRule ^search(.*)?$ /newdir/ [NC,L,R=301] 不应在 URL 中保留查询字符串。只有当$1 存在时,查询字符串才应该存在。您是否清除了缓存或尝试了其他浏览器?
    猜你喜欢
    • 2016-07-18
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多