wamp local subdomains和htaccess重写规则

时间:2013-02-04 17:05:45

标签: php .htaccess mod-rewrite wamp mod-vhost-alias

我最近用一些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或图像这样的文件时,浏览器假设我们向下移动了文件夹结构,因为网址中有破折号     本地主机/项目名称/ controllername /动作/ ID

所以在localhost / controllername / action / id / css / styles.css中请求了css / styles.css 有绝对路径修复了这个问题,但在没有“projectname” - 文件夹

之后,没有很好地使用本地测试服务器和远程实时和开发服务器

我决定配置我的本地wamp服务器,以便我可以访问我的不同项目作为我的localhost的子域,如“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']可能存在问题。但是没有正确设置,但知道这还没有帮助我解决这个问题。

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

1 个答案:

答案 0 :(得分: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。

希望这有助于其他人遇到同样的问题... :)