1

我最近用 php mvc 魔法修复了我的网站,为此我在 .htaccess 中使用了这些设置:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([a-zA-Z0-9]*)/?([a-zA-Z0-9]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&arg=$3 [NC,L]

它就像一个魅力。我遇到的唯一问题是,当我相对引用 css 或图像之类的文件时,由于 url localhost/projectname/controllername/action/id 中的破折号,浏览器假定我们向下移动了文件夹结构

因此,在 localhost/controllername/action/id/css/styles.css 请求了 css/styles.css,其绝对路径解决了该问题,但在有本地​​测试服务器和远程实时和开发服务器后无法正常工作没有“项目名称”- 文件夹

我决定配置我的本地 wamp 服务器,以便我可以将我的不同项目作为子域访问到我的本地主机,如“ http://projectname.localhost ”。

我激活了相关的 apache 模块,编辑了我的 hosts 文件并将我的 httpd-vhosts.conf 更改为

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName localhost.com
    ServerAlias www.localhost.com
    DocumentRoot "C:\wamp\www"
    ErrorLog "logs\errors.log"
    <directory "C:\wamp\www">
        Options Indexes FollowSymLinks
        AllowOverride all
        Order Deny,Allow
        Deny from all
        Allow from all
    </directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName localhost.com
    ServerAlias *.localhost.com
    VirtualDocumentRoot "C:\wamp\www\subdomains\%1"
    ErrorLog "logs\errors.log"
    <directory "C:\wamp\www\subdomains\%1">
        Options Indexes FollowSymLinks
        AllowOverride all
        Order Deny,Allow
        Deny from all
        Allow from all
    </directory>
</VirtualHost>

现在,当我调用 projectname.localhost.com/controllername/action/id 时,它告诉我在此服务器上找不到请求的 URL /subdomains/projectname/index.php。虽然 projectname.localhost.com/index.php 仍然为我提供了正确的文件。

我听说 $_SERVER['DOCUMENT_ROOT']; 可能有问题。这没有正确设置,但知道这还没有帮助我解决这个问题。

有人可以指出我正确的方向或建议在这些情况下进行测试的另一种环境配置吗?

4

1 回答 1

2

将我的 .htaccess 更改为

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([a-zA-Z0-9]*)/?([a-zA-Z0-9]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&arg=$3 [NC,L]

解决了那个问题。魔术线是RewriteBase /

似乎服务器真的在错误的地方寻找 index.php。

希望这可以帮助其他有同样问题的人...... :)

于 2013-02-05T07:22:22.453 回答