如何让 Apache 使用一个公共 URL 查看两个不同的目录?后续问题

如何让 Apache 使用一个公共 URL 查看两个不同的目录?后续问题

这是我之前的一个后续问题问题在这个网站上。也许我应该指出,Apache 服务器是在 Windows 系统上运行的,不知道这是否重要。

我的问题如下:
我有 2 个驱动器 J: 和 K:,都有一个目录测试(J:/测试/凯:/测试/
J:/测试/包含文件粉红色.html
凯:/测试/包含文件红色.html蓝色.html
我想要访问J:/测试/凯:/测试/使用相同的 URL:

这是我的 httpd.conf 文件的摘录:

Alias /test/ "J:/test/"
Alias /test2/ "K:/test/"

<Directory "J:/test/">
Order allow,deny
Allow from all

Options All MultiViews
AllowOverride None


RewriteEngine on

RewriteCond /test/%(REQUEST_FILENAME) !-f #if we can't find the file in /test/
RewriteRule ^(.+) /test2/$1 [L]   #rewrite url into /test2/something.html

RewriteCond /test/%(REQUEST_FILENAME) -f #if we find the file in /test/
RewriteRule ^(.+) /test/$1    #should this even be necessary ?


</Directory>  

这只起到了部分作用,我可以访问 K: 驱动器上的 red.html 和 blue.html,但无法访问 J: 驱动器上的 pink.html。它似乎完全忽略了第二RewriteCond-RewriteRule对。如何配置 httpd.conf 来访问 pink.html?
我尝试了几种方法,但都没用 :-( 我希望我的问题清楚,并且有人可以对这个问题作出解释。
提前谢谢!/亚历克斯

答案1

尝试这个,

RewriteRule ^(.+) /test/$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/test/(.+) /test2/$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/test2/(.+) /test3/$1

...

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/test1E+10/(.+) http://www.google.com/search?q=where-is-$1 [L]

答案2

在 Linux 下,您可以在文件系统级别执行此操作,因为有多个文件系统支持以这种方式联合其他文件系统(即使在读+写模式下),但我认为在 Windows 中没有办法这样做。

另一个选项(同样在操作系统级别而非 Apache 级别)可能是将所有文件作为符号链接放在一个位置。如果您使用 NTFS 文件系统,则在 Windows 下可以使用以下实用程序这是来自 SysInternals 的

答案3

您不需要第二个 RewriteCond/Rule 组合,因为基本上您是在试图告诉 Apache 做它本来会做的事情。基本上,如果在请求的位置 (/test/pink.html) 找到文件,则默认操作是将其提供给客户端。

我会将这些 Rewrite* 移出目录构造;该容器通常用于访问限制,而您所做的是逻辑重定向。将 Rewrite* 移出并删除第二节后,编辑 RewriteCond 以使用 {} 而不是 () 字符,因为这是适当的方法。

如果完成所有这些操作后它仍然不起作用,请添加以下两行:

RewriteLog "c:/rwlog.txt"
RewriteLogLevel 7

...重新启动 Apache,测试并读取日志文件以找出接下来 Apache 不喜欢什么。

相关内容