我在一些.htaccess示例中看到过这种情况

RewriteBase /

它的功能似乎有点类似于HTML的<base href="">。

我相信它会自动把它的值放在RewriteRule语句的开头(可能是没有斜杠的语句)?

我无法让它正常工作。我认为它的使用对于站点的可移植性非常方便,因为我经常有一个与生产服务器不同的开发服务器。我当前的方法让我从RewriteRule语句中删除部分内容。

谁能简单地给我解释一下如何实现它?

谢谢


当前回答

这个命令可以显式地为重写设置基本URL。如果你想从你的域的根开始,你可以在你的RewriteRule之前包括以下一行:

RewriteBase /

其他回答

我相信这段摘自Apache文档的摘录,很好地补充了前面的答案:

This directive is required when you use a relative path in a substitution in per-directory (htaccess) context unless either of the following conditions are true: The original request, and the substitution, are underneath the DocumentRoot (as opposed to reachable by other means, such as Alias). The filesystem path to the directory containing the RewriteRule, suffixed by the relative substitution is also valid as a URL path on the server (this is rare). As previously mentioned, in other contexts, it is only useful to make your rule shorter. Moreover, also as previously mentioned, you can achieve the same thing by placing the htaccess file in the subdirectory.

当我开发时,它在一个文件夹中的另一个域中。当我启动一个网站时,这个文件夹就不存在了。使用RewriteBase可以让我在两个环境中使用相同的.htaccess文件。

当生活:

RewriteBase /
# RewriteBase /dev_folder/

当开发:

# RewriteBase /
RewriteBase /dev_folder/

AFAIK, RewriteBase只用于修复mod_rewrite运行在。htaccess文件中而不是在站点的根目录下的情况,并且它为运行的文件夹猜测了错误的web路径(而不是文件系统路径)。所以如果你在一个。htaccess文件夹中有一个RewriteRule映射到http://example.com/myfolder,你可以使用:

RewriteBase myfolder

如果mod_rewrite不能正常工作。

试图用它来实现一些不寻常的东西,而不是解决这个问题,听起来像是一个非常混乱的配方。

我简单地删除。htaccess文件,它运行完美

这个命令可以显式地为重写设置基本URL。如果你想从你的域的根开始,你可以在你的RewriteRule之前包括以下一行:

RewriteBase /