MVC移除”;index.php”;以及“;获取“;请求


MVC remove "index.php" and "GET" request from the url

我正在用一个简单的登录视图构建一个PHP应用程序。我使用URL中的两个GET参数(控制器和操作)来路由视图:

http://www.web.com/index.php?controller=access&action=login

问题是,我不喜欢这个网址,我想这样显示:

http://www.web.com/access/login

我在htaccess中读到了一些重定向,但没有人能像预期的那样工作。有人知道这样做的解决方案或最佳实践吗?

我的应用程序结构如下:

app/
  |-- view/
  |   |-- login.php
  |-- base.php
src/
  |-- controller/
  |   |-- AccessController.php
  |-- router.php
index.php
.htaccess

我知道两种解决方案:

1.将所有请求重定向到主index.php并在该文件上路由模式

创建一个.htaccess文件并放入此代码以将所有URL重定向到index.php

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{QUERY_STRING} base64_encode[^(]*'([^)]*') [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|'[|'%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|'[|'%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_URI} !^/index'.php
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|'.(php|html?|feed|pdf|vcf|raw|xml|jpg|ajx))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

在这种情况下,所有请求都将重定向到index.php,您可以从$_SERVER['REDIRECT_URL']获得URL并路由请求。

如果用户请求/a/b.html,您可以从不同的部分使用$_SERVER['REDIRECT_URL'],您应该在2解决方案中使用安全代码。

2.直接用.htaccess文件处理路由

但我推荐解决方案#1

Options +FollowSymLinks
RewriteEngine on
RewriteRule a/b'.html index.php?controller=$1&action=$2