重定向到目录并隐藏URL

时间:2012-01-31 12:48:34

标签: .htaccess mod-rewrite

以下指令会将所有非www子域重定向到www子域。例如: blog.myname.com会重定向到www.blog.myname.com

RewriteEngine On
RewriteCond %{HTTP_HOST} ^((?!www)[^\.]*)\.myname\.com$ [NC]
RewriteRule ^ http://www.%1.myname.com%{REQUEST_URI} [L,R=301]

我会更精确。在我的根目录中,我创建了一个目录调用博客,因此目录结构现在就像这个myname.com/blog
这是用户访问我的页面时所需要的:

  1. 如果网址为myname.comwww.myname.com - >用户将在根目录中看到索引文件。没有变化。
  2. 如果网址为hello.myname.com - >它会添加www,因此它会变成www.hello.myname.com并重定向到www.hello.myname.com
  3. 如果网址为www.hello.myname.com - >用户被重定向到myname.com/blog并且可以看到myname.com/blog中的内容但是该网址已被屏蔽且仍显示www.hello.myname.com
  4. 原因是您可以测试ipohla.cheapantivirus.me并且您可以在myname.com/blog看到索引文件,但如果www.ipohla.cheapantivirus.me域正确传播。这就是我需要将www添加到非www子域的原因。谢谢。

    www.subdomain.myname.com以下的当前.htacess不会在外部重定向,并且会看到myname.com/blog/index.html目录的内容。

    Options +FollowSymLinks -MultiViews
    RewriteEngine On
    
    # externally redirect all subdomains to www.subdomain...
    RewriteCond %{HTTP_HOST} ^((?!www)[^\.]*)\.cheapantivirus\.me$ [NC]
    RewriteRule ^ http://www.%1.cheapantivirus.me%{REQUEST_URI} [L,R=301]
    
    # Proxy to www.cheapantivirus.com/blog/index.html for every subdomain
    RewriteCond %{HTTP_HOST} ^(www\.)?((?!www)[^\.]*)\.cheapantivirus\.com$ [NC] 
    RewriteRule ^$ http://www.cheapantivirus.com/blog/index.html [P,L]
    

2 个答案:

答案 0 :(得分:3)

您可以尝试这样的通用规则:

RewriteCond %{HTTP_HOST} ^(www\.)?((?!www)[^\.]*)\.cheapantivirus\.com$ [NC] 
RewriteRule ^$ http://www.cheapantivirus.com/blog/index.html [P,L]

请注意,这需要在Apache中启用mod_proxy。

这将代理:

www.blog.cheapantivirus.com to www.cheapantivirus.com/blog/index.html
www.blog.cheapantivirus.com to www.cheapantivirus.com/blog/index.html
www.subdomain.cheapantivirus.com to www.cheapantivirus.com/blog/index.html
www.foo.cheapantivirus.com to www.cheapantivirus.com/blog/index.html

由于它使用P标志,因此不会导致您的浏览器网址发生变化。

答案 1 :(得分:0)

  

如何将用户重定向到www.blog.myname.com/blog/index.html,但地址栏中的网址被屏蔽,只显示www.blog.myname.com

RewriteCond %{HTTP_HOST} ^www\.blog\.myname\.com$ [NC] 
RewriteRule ^$ blog/index.html [L]

如果您想将来自www.blog.myname.com的所有请求发送到www.blog.myname.com/blog,请改用

RewriteCond %{HTTP_HOST} ^www\.blog\.myname\.com$ [NC] 
#not already /blog/
RewriteCond %{REQUEST_URI}  !^/blog/[NC] 
#not an existing file or directory
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ blog%{REQUEST_URI} [L]

在您已有的重定向规则

之后,将以下内容添加到.htaccess文件中