我创建了一个基于http://www.php-mvc.net/的php项目,我在Google上搜索了如何设置WAMP Server
以启用URL
重写。
我正在运行最新版本的WAMP。
1)在mod_rewrite
httpd.conf
模块
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>
3)在我的主机文件中,我添加了主机127.0.0.1 phpmvc.test
4)在.htacces文件中我有这行
RewriteEngine on
RewriteRule ^(.*)\/$ index.php?url=$1 [QSA,L]
我在设置文件后重新启动Apache,当我转到phpmvc.test
时它工作正常但是当我尝试phpmvc.test/test
时,它显示一个错误,指出在此服务器上找不到请求的URL。
编辑:我尝试了RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
,但它显示了同样的错误
EDIT2:我试过EDIT:我尝试了Rahil Wazir的建议,但它仍然没有用。
我有这个控制器文件IndexController.class.php
,如果我使用此网址访问它是有效的:phpmvc.test?url=index
但如果我尝试phpmvc.test/index
,则说明找不到index
服务器
<?php
class IndexController {
public static function index() {
echo "Index controller";
}
}
在root上打印$_GET
和$_SERVER
我得到一个空的Array()
和服务器阵列。如果我转到phpmvc.test/index?url=index
,我会在$_GET["url"]
和$_SERVER [QUERY_STRING] => url=index
上获得价值。
答案 0 :(得分:0)
这是因为Apache认为/test
是您尝试访问的文件或目录,可能不存在。
您需要应用大多数Front controller pattern框架使用的两个着名条件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
除非请求的uri中的文件或目录存在,否则告诉Apache重写模块,然后应用重写规则,否则呈现文件或目录的内容。
答案 1 :(得分:0)
通过检查$ _GET和$ _SERVER变量中的内容进行调试。
print_r($_GET);
print_r($_SERVER);
比较[&#39; url&#39;]索引值的差异。 此外,它可能取决于您在/ index。之前的URL上看到的子文件夹深度。