这是我之前在这个网站上的问题的一个后续问题。 也许我应该指出,Apache服务器运行在Windows系统上,不知道是否重要。
我的问题如下:
我有2个驱动器J:和K :,都有一个目录testing( J:/ test /和K:/ test / )
J:/ test /包含文件pink.html
K:/ test /包含文件red.html和blue.html
我想访问J:/ test /和K:/ test /中的所有文件,并使用相同的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对。 如何configurationhttpd.conf来访问pink.html?
我已经尝试了几种方法,但没有用.-(我希望我的问题很清楚,有人可以在这个问题上提出一些看法。
提前致谢! /亚历克斯
尝试这个,
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]
在Linux下,你可以在文件系统级别执行这个操作,因为有几个文件系统支持以这种方式联合其他文件系统(甚至在读写模式下),但是我不认为在Windows中有这样做的方法。
另一个select,在操作系统级别,而不是在Apache,可能是把所有的文件作为符号链接到一个地方。 如果你正在使用SysInternals这样的工具来使用NTFS文件系统,那么在Windows下是可行的。
你不应该需要第二个RewriteCond / Rule组合,因为基本上你试图告诉Apache做同样的事情。 基本上,如果find文件的位置(/test/pink.html),则默认操作是将其提供给客户端。
我会将这些Rewrite *移动到您的目录结构之外; 该容器通常用于访问限制,您正在做的是一个逻辑redirect。 在将Rewrite *移出并删除第二节之后,编辑RewriteCond以使用{}和not()字符,因为这是正确的方式。
如果毕竟这还没有工作,添加这两行:
RewriteLog "c:/rwlog.txt" RewriteLogLevel 7
…重新启动Apache,testing并阅读日志文件,找出下一个Apache不喜欢的东西。