【发布时间】:2012-06-01 21:40:08
【问题描述】:
我知道这里有很多类似的问题,但不幸的是,它们都没有解决我遇到的问题。我正在尝试弄清楚为什么当您也有别名时重写规则不起作用,下面是对导致问题的情况的解释。
我有许多 Zend Framework 应用程序,我想将它们包含在同一个子域中,因为我可以使用的子域有限,而且我想为我作为演示/教程所做的所有项目创建一个站点,所以有意义将它们全部放在一个地方。与许多 Web 应用程序/MVC 解决方案一样,Zend 框架旨在让每个应用程序都位于其自己的域或子域中。因此,我正在寻找一种解决方案,使文件夹成为站点/Web 应用程序,就像它是子域一样。这就是我目前所拥有的。
我在以下位置为演示设置了子域:C:/Apache2/htdocs/demos,其中有一个公用文件夹作为文档根目录(zend 框架使用公用文件夹作为文档根目录,上面有其他文件夹,如应用程序使应用程序工作;这是出于安全原因,以防止用户访问他们不应该访问的文件)。我也有 C:/Apache2/htdocs/zf-basic-project 用于我想要作为 demos.example.com 子域中的文件夹的应用程序(同样它有一个公共文件夹作为文档根目录)。
演示子域的虚拟主机如下所示:
<VirtualHost *:80>
ServerName demos.example.com
DocumentRoot "C:/Apache2/htdocs/demos/public"
ErrorLog "logs/demos-error.log"
CustomLog "logs/demos.log" common
<Directory "C:/Apache2/htdocs/demos/public">
DirectoryIndex index.php
AllowOverride All
</Directory>
Alias /zf-basic-project "C:/Apache2/htdocs/zf-basic-project/public/"
<Directory "C:/Apache2/htdocs/zf-basic-project/public">
DirectoryIndex index.php
AllowOverride None
Require all granted
RewriteEngine On
RewriteBase /zf-basic-project
RewriteCond %{REQUEST_URI} !^/zf-basic-project [NC]
RewriteRule ^(/?)(.*) /zf-basic-project/$2 [PT]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /zf-basic-project/index.php [NC,L]
</Directory>
</VirtualHost>
这一半做我想做的;别名使 zf-basic-project 出现在 demos.example.com/zf-basic-project 中,因为它引用 zf-basic-project 项目文件夹的公用文件夹,然后代码使用上面文件夹级别中的文件来查找它需要使用的所有文件。就像它真的在 C:/Apache2/htdocs/zf-basic-project/public 中一样。然后目录部分设置使用文件的权限,我选择将重写规则放在目录中并且不允许 .htaccess 文件,这样我就不必调整项目 .htaccess 文件来添加重写规则(我想保持原项目不变)。
我遇到的问题是因为 zf-basic-project 被写在它自己的子域中,它通过绝对路径引用诸如 CSS 之类的东西,例如/css/default.css 现在它是 demos 子域中的一个文件夹,据浏览器所知,这实际上位于 /zf-basic-project/css/default.css ,因此我尝试在目录中进行重写说 /zf-basic-project/css 实际上是 /css 这是代码:
RewriteCond %{REQUEST_URI} !^/zf-basic-project [NC]
RewriteRule ^(/?)(.*) /zf-basic-project/$2 [PT]
这表示如果链接不以 /zf-basic-project 开头,则将其添加到 URL。它适用于普通项目,但似乎与别名冲突并且不起作用。我还添加了一个 RewriteBase 以作为很好的衡量标准,它似乎也没有做任何事情。当应用程序在文件夹中运行时,其余的重写工作正常,但由于链接错误,它缺少 CSS、JavaScript 等,所以有谁知道让重写规则工作的修复程序,即 /css 被视为 /zf-基本项目/css。
我当然可以重做所有指向 CSS 等的链接,但我不想这样做,因为我想保持项目与最初的完全一样,因为它是一个演示,通常你不会在 sub文件夹,所以为了让事情更清楚,最好保持尽可能不修改。
提前感谢您的帮助,非常感谢,我必须花费至少 10 个小时来修复它,但似乎无法找到解决方案。
附言。对于那些好奇的人,我想与其他人一起包含在演示子域中的 Zend Framework 项目位于 GitHub 上 https://github.com/paulalbinson/zf-basic-project
【问题讨论】:
标签: apache mod-rewrite mod-alias