2012-02-08 95 views
-1

我想将链接“http://blog.test.com/”更改为“http://www.test.com/blog/”。.htaccess中的RewriteRule

我试过下面的代码在我的.htaccess

RewriteRule ^blog.test.com?$ test.com/blog [NC,R=301,L] 

我错过了什么?由于

回答

2

如果你使用Apache,你需要在的RewriteCond的URL(如blog.test.com)的主机部分匹配:

RewriteCond %{HTTP_HOST} ^blog.test.com$ [NC] 
RewriteRule ^(.*)$ http://www.test.com/blog/$1 [R=301,L] 
+0

对不起...这不起作用 – Natasha 2012-02-08 04:43:25

+0

'对不起...这不行':在这里看过很多这类评论。如果你真的想得到很好的答案,请提供很好的解释。例如:你需要告诉哪个URI不起作用,你也可以看看你的access.log和error.log,并在这里发布匹配的行。 – anubhava 2012-02-08 06:13:57

+0

现在它本身显示blog.test.com。它不会重定向到test.com/blog – Natasha 2012-02-08 06:44:31

1

首先,你必须更换http://blog.test.com/whatever_or_empty到您的HTML hrefs中的http://www.test.com/blog/whatever_or_empty

blog.test.com虽然子域是不同的URL。即当一个RewriteRule重写到另一个URL时,将发生外部重定向。这将反映在浏览器中。暂时为redirect(302(the default))permanent redirect(301)

因此,使用url重写将链接http://blog.test.com/更改为http://www.test.com/blog/是无用的。


虽然,您可以使用Apache Module mod_proxy来实现此目的。

Apache的代理模块有以下:

  • mod_proxy的:具有代理基础设施,配置和管理代理请求的核心模块处理。
  • mod_proxy_http:这将处理使用HTTP和HTTPS获取文档。
  • mod_proxy_ftp:这将处理使用FTP获取文档。
  • mod_proxy_connect:这处理安全(SSL)隧道的CONNECT方法。
  • mod_proxy_ajp:这将处理Tomcat和类似的后端服务器的AJP协议。
  • mod_proxy_balancer通过多个后端实现集群和负载平衡。
  • mod_cache,mod_disk_cache,mod_mem_cache:这些处理管理文档缓存。要启用缓存,需要mod_cache以及disk_cache和mem_cache中的一个或两个。
  • mod_proxy_html:这会将HTML链接重新写入代理的地址空间。
  • mod_xml2enc:这代表mod_proxy_html和其他标记过滤模块支持国际化(i18n)。空间。
  • mod_headers:修改HTTP请求和响应头。
  • mod_deflate:与客户端和后端协商压缩。

您需要的 - 至少对于代理启用工作mod_proxymod_proxy_http模块:

,你应该在你的apache的conf文件类似如下的行:

LoadModule proxy_http_module modules/mod_proxy_http.so 
LoadModule proxy_module modules/mod_proxy.so 

在您的Virtualhost中使用此产品http://www.test.com

ProxyPass /blog http://blog.test.com 
ProxyPassReverse /blog http://blog.test.com 
ProxyRequests On 
ProxyVia On 

<Proxy *> 
Order allow,deny 
Allow from all 
</Proxy> 

定义:


你也可以使用一个缓存,mod_cachemod_cache
有关缓存的更多信息,请参考此处:mod_cache Apache Docs