代码之家  ›  专栏  ›  技术社区  ›  halloleo

重定向到子目录并跳出子目录

  •  0
  • halloleo  · 技术社区  · 15 年前

    我有一个无法解决的mod_重写重定向问题。

    来自特定域的所有请求都会被“静默”重写到指定的子目录中。例如 www.mydomain.net/hello.html 在中检索文件 /net/hello.html . 以下.htaccess (放在我的宿主根目录中) 完美实现:

    RewriteEngine on
    RewriteBase /
    RewriteCond %{ENV:REDIRECT_STATUS} 200 # <-- i will need this later. read to the end of the post.
    RewriteRule .* - [L]
    rewriteCond %{HTTP_HOST} ^www.mydomain.net$
    rewriteCond %{REQUEST_URI} !^/net.*$
    rewriteRule (.*) /net/$1 [L]
    

    但是,将url直接指向这个目录应该可以用301明显地重定向到url 没有 那个子目录。例如 www.mydomain.net/net/hello.html 应该重定向到 www.mydomain.net/hello.html (它将在 /net/hello.html )。我的.htacces文件 (置于 /net ) 不幸的是不起作用:

    RewriteEngine on
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^localhost$
    RewriteRule ^(.*) /$1 [R=301,L]    
    

    我得到一个不定式重定向循环,尽管 RewriteCond %{ENV:REDIRECT_STATUS} 200 在根.htaccess文件中阻止…怎么了?

    顺便说一句,我必须使用mod_rewrite,因为这个站点是外部托管的,我不能访问apache配置。

    非常感谢你的指点。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Gumbo    15 年前

    检查 HTTP request line 在里面 小精灵 而是:

    RewriteCond %{THE_REQUEST} ^GET\ /net[/? ]
    RewriteRule ^net($|/(.*)) /$2 [L,R=301]
    
    推荐文章