关于 Apache 中 mod_rewrite url 的建议

关于 Apache 中 mod_rewrite url 的建议

我正在尝试设置一条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>

尝试一下。

相关内容