如何从用户隐藏.htaccess重定向

如何从用户隐藏.htaccess重定向,.htaccess,redirect,mod-rewrite,subdirectory,subdomain,.htaccess,Redirect,Mod Rewrite,Subdirectory,Subdomain,我的服务器具有域www.domain.com和多个子域sub1.domain.com、sub2.domain.com。它们都指向服务器根目录 我希望用户通过子域访问特定文件夹。例如: sub1.domain.com/someURI=>sub1.domain.com/subFolder1/someURI sub2.domain.com/someURI=>sub1.domain.com/subFolder2/someURI 我想对用户隐藏这些重定向。我尝试了以下.htaccess文件: Rewr

我的服务器具有域www.domain.com和多个子域sub1.domain.com、sub2.domain.com。它们都指向服务器根目录

我希望用户通过子域访问特定文件夹。例如:

  • sub1.domain.com/someURI=>sub1.domain.com/subFolder1/someURI
  • sub2.domain.com/someURI=>sub1.domain.com/subFolder2/someURI
我想对用户隐藏这些重定向。我尝试了以下.htaccess文件:

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^sub1.domain.com$
RewriteRule ^(.*)$ http://sub1.domain.com/subFolder1/$1 [R,L]

RewriteCond %{HTTP_HOST} ^sub2.domain.com$
RewriteRule ^(.*)$ http://sub2.domain.com/subFolder2/$1 [R,L]

它仅在没有任何URI的情况下正确重定向,并且重定向可见。

您有两个问题导致外部重定向:

  • 重写规则中使用
    R
    标志
  • 在目标中使用以http://开头的绝对URL
  • 另一个问题是,您的重写规则是无条件的,这可能会导致无限循环
  • 您可以使用以下规则:

    RewriteEngine on
    RewriteBase /
    
    RewriteCond %{HTTP_HOST} =sub1.domain.com
    RewriteRule ^((?!subFolder1/).*)$ subFolder1/$1 [NC,L]
    
    RewriteCond %{HTTP_HOST} =sub2.domain.com
    RewriteRule ^((?!subFolder2/).*)$ subFolder2/$1 [NC,L]
    

    是否有任何原因阻止您创建指向所需目录的两个不同虚拟主机?“且重定向可见”-查看
    R
    标志代表什么。@CBroe我知道R代表重定向。我发现一些信息,没有参数的R等于R=302-临时移动,应该对用户隐藏。@Eineki是托管服务器,我没有所需的权限。R标志强制外部重定向,您需要内部重定向(没有到浏览器的往返)。也许你应该略去那面旗子…它就像一个符咒。非常感谢。你能解释一下重写规则吗,因为我不确定我是否得到了它?
    重写规则
    与添加了一个负前瞻的规则差不多,即
    (?!subFolder1/)
    ,这意味着不转发is请求已经从
    /子文件夹2/