我最近用一些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']可能存在问题。但是没有正确设置,但知道这还没有帮助我解决这个问题。
有人可以指出我正确的方向或建议另一种环境配置,以便在这种情况下进行测试吗?
答案 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。
希望这有助于其他人遇到同样的问题... :)