我有一个URL http://localhost/index.php?user=1
。 当我添加这个.htaccess
文件
Options +FollowSymLinks RewriteEngine On RewriteRule ^user/(.*)$ ./index.php?user=$1
我现在将被允许使用http://localhost/user/1
链接。 但是,如何http://localhost/index.php?user=1&action=update
我怎么能进入http://localhost/user/1/update
?
另外我怎么能使这个urlhttp://localhost/user/add
? 谢谢。 对不起,我对.htaccess
比较新。
你可以写这样的东西:
RewriteEngine On RewriteRule ^([^/]*)/([^/]*)$ /index.php?user=$1&action=$2 [L]
如果你想转向
http://www.yourwebsite.com/index.php?user=1&action=update
成
http://www.yourwebsite.com/user/1/update
你可以使用
Options +FollowSymLinks RewriteEngine On RewriteRule ^user/([0-9]*)/([az]*)$ ./index.php?user=$1&action=$2
要在PHP中查看参数:
<?php echo "user id:" . $_GET['user']; echo "<br>action:" . $_GET['action']; ?>
在我看来,这比(。*)更干净,更安全,这几乎意味着任何事情都被接受。
既然你用PHP标记了这个标记,我将从我所做的事情上添加一点点的视角,它可能会或可能不会帮助你。
当然,你可以单独在.htaccess中写,注意顺序。 例如,假设你有:
RewriteRule ^user/([0-9]+)/update$ ./index.php?user=$1&action=update RewriteRule ^user/([0-9]+)$ ./index.php?user=$1
那么它应该在收到之后
http://localhost/user/1/update
去
http://localhost/index.php?user=$1&action=update
并不是
http://localhost/index.php?user=$1
现在,我所做的是将所有内容都推送到index.php?q=$1
RewriteRule ^(.*)$ index.php?q=$1
然后我使用index.php来处理查询如何被分解。 所以我们假设有人进入
http://www.example.com/user/18239810/update
这将去
http://www.example.com/index.php?q=user/18239810/update
从那里,爆炸查询字符串沿第一/
给予user
和18239810/update
。
这将告诉我,我需要通过18239810/update
到user
控制器。 在那个控制器中,我再次将参数分解到用户标识和命令中,我可以打开命令来告诉如何加载页面,并将用户标识作为参数传递给update
函数。
非常快速和肮脏的例子(index.php):
<?php $getString = explode('/', $_GET['q'], 1); $controller = $getString[0].'Controller'; require_once('/controllers/'.$controller.'.php'); $loadedController = new $controller( $getString[1] ); ?>
当然,这意味着构造函数都必须接受一个字符串参数,该参数将被解析为可接受的值。 您可以使用爆炸和切换语句来做到这一点,总是默认回到标准的首页,以防止基于随机猜测的未经授权的访问。
感谢@denoise和@mogosselin。 另外用@stslavik指出我的代码示例的一些缺点。
以下是我如何做到这一点:
Options +FollowSymLinks RewriteEngine On RewriteRule ^user/([0-9]*)/([az]*)$ ./index.php?user=$1&action=$2 RewriteRule ^user/([az]*)$ ./index.php?user&action=$1
通过使用var_dump($_GET);
在我的链接localhost/user/1234/update
array (size=2) 'user' => string '1234' (length=4) 'action' => string 'update' (length=3)
而localhost/user/add
array (size=2) 'user' => string '' (length=4) 'action' => string 'update' (length=3)
这是我的目标。 我只会用PHP来做其他的事情。
对于/user/add
你将需要做一个单独的规则,因为你没有“中间参数”。 所以:
RewriteRule ^user/add$ ./index.php?action=add [L,QSA]
然后,您可以为包含其他参数的网址执行其他规则:
RewriteRule ^user/([0-9]+)/([A-Za-z]+)$ ./index.php?user=$1&action=$2 [L,QSA]
这将允许您对现有用户执行操作。 例如/user/1/update
一个简单的方法就是像这样只传递一个变量到index.php
Options +FollowSymLinks RewriteEngine On RewriteRule ^(.*)$ index.php?data=$1 [QSA]
并在你的index.php文件中做到这一点
$data = expload("/",$_GET['data']); $user = $data[1]; $action = $data[2];
这一个适用于所有情况,当你尝试传递许多变量时,当你做类似的事情时,它不起作用
http://localhost/user/add/12/54/54/66
最后一个变量总是取值add/12/54/54/66
它的简单只是试试这个!
Options +FollowSymLinks RewriteEngine On RewriteRule ^game/([0-9]+)/([_-0-9a-zA-Z]+)/?$ index.php?user=$1&action=$2 [L,NC]
而已 !!
试试这很简单:
Options +FollowSymLinks RewriteEngine on RewriteRule index/user/(.*)/(.*)/ index.php?user=$1&action=$2 RewriteRule index/user/(.*)/(.*) index.php?user=$1&action=$2