我在一些.htaccess示例中看到过这种情况
RewriteBase /
它的功能似乎有点类似于HTML的<base href="">。
我相信它会自动把它的值放在RewriteRule语句的开头(可能是没有斜杠的语句)?
我无法让它正常工作。我认为它的使用对于站点的可移植性非常方便,因为我经常有一个与生产服务器不同的开发服务器。我当前的方法让我从RewriteRule语句中删除部分内容。
谁能简单地给我解释一下如何实现它?
谢谢
我在一些.htaccess示例中看到过这种情况
RewriteBase /
它的功能似乎有点类似于HTML的<base href="">。
我相信它会自动把它的值放在RewriteRule语句的开头(可能是没有斜杠的语句)?
我无法让它正常工作。我认为它的使用对于站点的可移植性非常方便,因为我经常有一个与生产服务器不同的开发服务器。我当前的方法让我从RewriteRule语句中删除部分内容。
谁能简单地给我解释一下如何实现它?
谢谢
当前回答
我发现最清楚的解释不在当前的2.4 apache文档中,而是在2.0版本中。
# /abc/def/.htaccess -- per-dir config file for directory /abc/def
# Remember: /abc/def is the physical path of /xyz, i.e., the server
# has a 'Alias /xyz /abc/def' directive e.g.
RewriteEngine On
# let the server know that we were reached via /xyz and not
# via the physical path prefix /abc/def
RewriteBase /xyz
它是如何工作的?对于apache黑客来说,这个2.0文档继续提供了“关于内部处理步骤的详细信息”。
经验教训:虽然我们需要熟悉“当前”,但我们可以在历史中找到珍宝。
其他回答
RewriteBase只在你只能把.htaccess放在你站点根目录的情况下有用。否则,你最好将不同的.htaccess文件放在站点的不同目录下,完全忽略RewriteBase指令。
最近,对于复杂的站点,我已经把它们去掉了,因为这使得从测试到实时的文件部署再复杂一步。
我简单地删除。htaccess文件,它运行完美
用我自己的话说,在阅读了文档和实验之后:
您可以使用RewriteBase为您的重写提供一个基础。考虑一下这个
# invoke rewrite engine
RewriteEngine On
RewriteBase /~new/
# add trailing slash if missing
rewriteRule ^(([a-z0-9\-]+/)*[a-z0-9\-]+)$ $1/ [NC,R=301,L]
这是我用来确保url有一个尾随斜杠的真实规则。这将会转换
http://www.example.com/~new/page
to
http://www.example.com/~new/page/
通过在那里设置RewriteBase,可以使相对路径脱离RewriteBase参数。
AFAIK, RewriteBase只用于修复mod_rewrite运行在。htaccess文件中而不是在站点的根目录下的情况,并且它为运行的文件夹猜测了错误的web路径(而不是文件系统路径)。所以如果你在一个。htaccess文件夹中有一个RewriteRule映射到http://example.com/myfolder,你可以使用:
RewriteBase myfolder
如果mod_rewrite不能正常工作。
试图用它来实现一些不寻常的东西,而不是解决这个问题,听起来像是一个非常混乱的配方。
这个命令可以显式地为重写设置基本URL。如果你想从你的域的根开始,你可以在你的RewriteRule之前包括以下一行:
RewriteBase /