我正在尝试设置一条mod_rewrite
规则,以便在请求网页时www.mysite.com/blog
加载来自博客服务 Tumblr 的页面。我已经设置了我的 Tumblr 网站,以便 blog.mysite.com 返回域。目前,www.mysite.com/blog
重定向到blog.mysite.com
。我想要的是www.mysite.com/blog
显示blog.mysite.com
并且让用户不知道blog.mysite.com
。我尝试了几种不同的方法来实现这一点。首先,我尝试使用重写规则:
RewriteEngine On # Turn on the rewriting engine
RewriteRule /blog/ http://blog.mysite.com/ [NC,P,L]
然后是“ProxyPass”(第一次尝试)
ProxyPass /blog/ http://blog.mysite.com/
第二次尝试:
<Location /blog/>
ProxyPass http://blog.mysite.com/
</Location>
然后,我看到了另一条更复杂的mod_rewrite
规则,我也尝试了:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mysite.com/blog$
RewriteCond %{REQUEST_URI} !/standard
RewriteRule ^(.*)$ http://blog.mysite.com$1 [R]
</IfModule>
我将非常感激任何关于如何最好地做到这一点的建议。
答案1
您没有提到每种情况的具体问题,但根据我的经验,尝试调试 RewriteRules 时,最好的做法是打开重写日志并提高 rewriteloglevel。这将显示传入的请求、每条规则的通过/失败,以及当请求与规则匹配时它对请求执行的操作。
RewriteLog "/usr/local/var/apache/logs/rewrite.log"
RewriteLogLevel 3
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteloglevel
请记住在完成后禁用此功能,因为它会对性能造成影响,尤其是在 3 及以上版本。
答案2
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mysite.com/blog$
RewriteCond %{REQUEST_URI} !/standard
RewriteRule ^(.*)$ http://blog.mysite.com$1 [R]
</IfModule>
那条规则几乎是正确的,应该是:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mysite.com$
RewriteCond %{REQUEST_URI} !/standard
RewriteRule ^(.*)$ http://blog.mysite.com$1 [R]
</IfModule>
尝试一下。