我开始了一个基于http://www.php-mvc.net/的php项目,我在谷歌上搜索了如何设置我的WAMP Server
以启用URL
重写。
我正在运行最新版本的WAMP。
1)在httpd.conf
上使能mod_rewrite
模块
2)在httpd-vhosts.conf
上添加虚拟主机
<VirtualHost *:80>
ServerName phpmvc.test
ServerAlias *.phpmvc.test
VirtualDocumentRoot "C:'wamp'www'phpmvc"
ErrorLog "logs'errors.log"
<directory "C:'wamp'www'phpmvc">
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Deny from all
Allow from all
</directory>
在我的hosts文件中,我添加了主机127.0.0.1 phpmvc.test
在。htacces文件中,我有以下几行
RewriteEngine on
RewriteRule ^(.*)'/$ index.php?url=$1 [QSA,L]
我在设置文件后重新启动Apache,当我去phpmvc.test
它工作正常,但当我尝试phpmvc.test/test
它显示一个错误,说请求的URL在这个服务器上找不到。
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
,但它显示了同样的错误编辑2:我尝试了Rahil Wazir的建议,但它仍然不起作用。
我有这个控制器文件IndexController.class.php
,如果我访问这个URL: phpmvc.test?url=index
,它可以工作,但如果我尝试phpmvc.test/index
,它说在服务器上找不到index
。
<?php
class IndexController {
public static function index() {
echo "Index controller";
}
}
在根上打印$_GET
和$_SERVER
,我得到一个空的Array()
和服务器数组。如果我去phpmvc.test/index?url=index
,我得到$_GET["url"]
和$_SERVER [QUERY_STRING] => url=index
的值
这是因为Apache认为/test
是一个可能不存在的文件或目录。
您需要应用大多数Front controller模式框架使用的两个著名条件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
告诉Apache重写模块,除非请求uri中的文件或目录存在,否则应用重写规则,否则呈现文件或目录的内容。
通过检查$_GET和$_SERVER变量中得到的内容进行调试。
print_r($_GET);
print_r($_SERVER);
比较['url']索引值的差异。此外,它可能取决于子文件夹的深度,如/index.