虚拟主机上的子目录

我正在一个Zend的web项目工作,并有一个要求,它的工作原理,它在顶级域,以及在这样的域+目录path:

www.myDomain.com www.myDomain.com/somedir/myproject/ 

在项目中有一个很好的实现方式,用来找出basePath并正确地包含文件(我inheritance了来自未知但开发人员的代码);

但是我没有设置我的VHosts来testing第二个例子www.myDomain.com/somedir/myproject/如果我所有的工作都正常的话。

我目前的设置是尽可能简单:

 #hosts 127.0.0.1 www.myDomain.com 

 #httpd-vhosts.conf NameVirtualHost *:80 <Directory C:/Projects> Order Deny,Allow Allow from all </Directory> <VirtualHost *:80> DocumentRoot C:\wamp\www ServerName localhost </VirtualHost> <VirtualHost *:80> DocumentRoot "C:\Projects\MyProject\public_html" ServerName "www.myDomain.com" </VirtualHost> #@ToDo make this work ... #<VirtualHost *:80> # DocumentRoot "C:\Projects\MyProject\public_html" # ServerName "www.myDomain.com/somedir/myproject/" #</VirtualHost> 

我可以用虚拟主机来做这个吗? 在本地机器上实现此设置的最佳做法是什么?

编辑:该项目使用Zend和前端控制器体系结构 (所有请求都redirect到index.php)和.htaccess当前重写规则是:

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php [NC,L] 

你需要的是一个别名,而不是虚拟主机。 虚拟主机使用主机名,而不是主机名+目录。

 <VirtualHost *:80> DocumentRoot "C:\Projects\MyProject\public_html" ServerName "www.myDomain.com" Alias /somedir/myproject "C:\Projects\MyProject\public_html" </VirtualHost> 

编辑:

OP的问题似乎有些不同,他的解决scheme是将所有不是实际物理文件的内容都发送到index.php,使用.htaccess文件中的RewriteRule。 这个工作,但把它们放在你的httpd.conf(或者如果它是包含文件的话)更有效率。

有一种方法可以轻松地将工作的RewriteRules从.htaccess移动到httpd.conf而不必更改它们:使用容器。

所以如果你在/ var / www / myproject有一个.htaccess,你可以像这样移动到httpd.conf。

 <Directory /var/www/myproject> RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php [NC,L] </directory> 

将规则放在.htaccess文件中的优点是每个请求都会读取一个.htaccess文件。 所以最好不要有任何东西。 您可以将RewriteRule移动到其目录上下文之外(以避免在每个匹配项上有内部redirect)。但是,您将不得不修改模式,就像在服务器上下文中那样,它是您匹配的整个URL,而不仅仅是部分之后的目录。