为什么这个.htaccess会跳过我的RewriteBase?

时间:2009-04-01 06:27:45

标签: apache .htaccess mod-rewrite

这是我的.htaccess

的开头
   # invoke rewrite engine
        RewriteEngine On
        RewriteBase /~new


    # force non domain.com to www.domain.com

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

每当我请求http://www.example.com/~new/whatever时,我都会被发送到http://www.example.com/whatever。我在$ 1附近放置了括号,我得到了http://www.example.com/[whatever]

为什么要剥离我的RewriteBase var?

或者,有没有办法在.htaccess中设置一个环境变量,我可以设置RewriteBase并放在$ 1前面以使重定向工作?

2 个答案:

答案 0 :(得分:3)

嗯,这就是RewriteBase的工作原理:它会从请求中删除所有前导路径信息,然后重新插入RewriteBase。但在您的示例中,它无法执行重新插入,因为您将其重定向到完全限定的URL。

我认为你应该备份并准确定义你要做的事情,并且可能会问一个新的问题,而不是假设RewriteBase是你需要使用的,并专注于“为什么不是RewriteBase做我想做的事“。 RewriteBase可能与它无关。

答案 1 :(得分:0)

只是做某事。像这样在文件的BEGINNING中,稍后设置重写基础

RewriteCond %{HTTP_HOST} ^webmaster-eye\.de$
RewriteRule ^(.*)$ http://www.webmaster-eye.de/$1 [L,R=301]