我想编写PHP MVC Web应用程序。
现在我正在尝试将任何输入的URL路由到index.php,所以我创建了一个.htaccess文件,如下所示
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [R,L,NS]
但是当我尝试输入任何网址时,它会将我路由到完整路径的网址
打字 - > 127.0.0.1/mvc/xxx/
路由到 - > http://127.0.0.1/C:/Program%20Files/EasyPHP-12.0/apache/htdocs/mvc/index.php
没有完整路径(C:/Program%20Files/EasyPHP-12.0/apache/htdocs)我想,我会得到我想要的。
请帮助解决此问题。
谢谢大家。 Kongthap。
我在Windows XP上使用EasyPHP。
答案 0 :(得分:4)
扩展Jalpesh Patel的答案:
你的.htaccess会将url路径传递给路由器或对其进行排序,例如URL:
http://example.com/mvc/controller/action/action2
:
RewriteEngine on
RewriteBase /mvc
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]
会发送到index.php?request=controller/action/action2
然后在索引中,希望将此请求路由到脚本的一部分,该脚本执行以下操作:
/*Split the parts of the request by / */
$request = (isset($_GET['request']) ? explode('/', $_GET['request']) : null);
//but most likely $request will be passed to your url layer
$request[0] = 'controller';
$request[1] = 'action';
$request[2] = 'action2';
答案 1 :(得分:1)
示例网址: http://example.com/controller/action1/action2/action3
在.htaccess中使用此规则:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} !-l
RewriteRule ^([a-zA-Z_-]*)/?([a-zA-Z_-]*)?/?([a-zA-Z0-9_-]*)?/?([a-zA-Z0-9_-]*)$ index.php?controller=$1&action1=$2&action2=$3&action3=$4 [NC,L]
考虑到__
,如果在中间添加了如何添加规则的字通过这样获取这些值来获得恢复:
$controller = (isset($_GET['controller']) ? $_GET['controller'] : "IndexController";
$action1= (isset($_GET['action1']) ? $_GET['action1'] : "IndexAction";
$action2= (isset($_GET['action2']) ? $_GET['action2'] : "";
$action3= (isset($_GET['action3']) ? $_GET['action3'] : "";
验证控制器类之后是否存在带有class_exists(),method_exists()的方法。
if( class_exists( $controller."Controller", false )) {
$controller = $controller."Controller";
$cont = new $controller();
}
else {
throw new Exception( "Class Controller ".$controller." not found in: "__LINE__ );
}
您的行动:$ action1
if( method_exists( $cont, $action1 ) ) {
$cont->$action1();
}
else {
$cont->indexAction();
//throw new Exception( "Not found Action: <b>$action</b> in the controller: <b>$controller</b>" );
}