如果 Apache 不允许你在这里做你想做的事情,我的回答是,但那是因为 AFAIK 你不需要这样做来做你真正需要做的事情。
似乎您正在尝试创建一个本地环境,该环境在配置方面反映了您的(远程)基于服务器的测试环境。但是,您混淆了 URI 名称空间和文件系统名称空间,而在 Apache Server 中,它们完全不同。例如,<Location>
指令作用于前者,<Directory>
指令作用于后者。 .htaccess
有点跨越两者,因此您需要了解参数何时对一个或另一个起作用。
例如,我有一个为多个子域提供服务的共享服务帐户*.ellisons.org.uk
——例如我的博客位于http://blog.ellisons.org.uk/上。我在 Ubuntu 笔记本电脑和一个镜像我的服务提供商运行的 LAMP/suPHP 配置的 VM 上进行开发(但我有 root 访问权限并且可以在 VM 上查看重写日志等) 我在我的192.168.1.0/24
私有地址空间中静态分配 IP 地址并且有/etc/hosts
同义词
127.0.1.1 ... blog.ellisons.org.home forum.ellisons.org.home ...
192.168.1.250 ... blog.ellisons.org.vm ...
但除此之外,URI 空间是相同的,因此blog.ellisons.org.XX/themes/terry/all.css
根据 XX=uk,home,vm 从我的服务器、笔记本电脑或 VM 加载我的 css
但是,我笔记本电脑上的 docroot 是 Debian 标准/var/www
的,但在另外两个上是/websites/LinuxPackage02/el/li/so/ellisons.org.uk/public_html
(我的主机命名约定)。然而,我的应用程序(包括.htaccess
文件)是相同的,它们反映这种多重用途的唯一方法是在正则表达式中,我使用正则表达式来匹配 %{HTTP_HOST} (\w+)\.ellisons.\org\.(?:uk|home|vm)
。
所以对于你的例子:
- 没有什么可以阻止您将请求指向本地 PC 上
/app
的物理目录。/codeigniter-app
您可以在服务器或虚拟主机配置中使用Alias
指令来执行此操作..
RewriteBase
采用 URI 路径参数,因此/app
两者都适用。
- 一般来说,Apache 理解 URI 和 FS 域之间的区别并且不会感到困惑——甚至您的开发人员也经常这样做:-) 在极少数情况下,您需要明确引用 FS 名称,比如在
RewriteCond
字符串中,您可以使用%{DOCUMENT_ROOT}
- 虽然如果您的服务是共享服务,您可能必须改用环境变量(我的是%{ENV:DOCUMENT_ROOT_REAL}
)。我 phpinfo() 会告诉你哪个。
- 确保在任何
RewriteRule
替换中使用相对地址(没有前导斜杠)。
总而言之,只要稍加思考,您就可以使您的配置在逻辑上与 Apache 提供的相同——这难道不比尝试以一种从未设计到产品中的方式在条件执行中搞砸更好吗?