我有一个网址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
?
另外,如何制作此网址http://localhost/user/add
?
谢谢。对不起,我对.htaccess
相对较新。
答案 0 :(得分:6)
你可以这样写:
RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)$ /index.php?user=$1&action=$2 [L]
答案 1 :(得分:5)
如果你想转
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]*)/([a-z]*)$ ./index.php?user=$1&action=$2
要在PHP中查看参数:
<?php
echo "user id:" . $_GET['user'];
echo "<br>action:" . $_GET['action'];
?>
在我看来,这比(。*)更加干净和安全,这基本上意味着几乎所有东西都被接受了。
答案 2 :(得分:2)
由于您使用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
控制器。在那个控制器中,我再次将参数分解为用户id和命令,我可以打开命令来告诉如何加载页面,将用户id作为参数传递给update
函数。
非常快速和肮脏的例子(index.php):
<?php
$getString = explode('/', $_GET['q'], 1);
$controller = $getString[0].'Controller';
require_once('/controllers/'.$controller.'.php');
$loadedController = new $controller( $getString[1] );
?>
当然,这意味着构造函数都必须使用一个字符串参数,该参数将被解析为可接受的值。您可以使用explodes和switch语句执行此操作,始终默认返回标准首页,以防止基于随机猜测的未经授权的访问。
答案 3 :(得分:1)
对于/user/add
,您需要执行单独的规则,因为您没有&#34;中间参数&#34;。所以:
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
答案 4 :(得分:1)
感谢@denoise和@mogosselin的想法。还有@stslavik指出了我的代码示例的一些缺点。
以下是我的表现方式:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^user/([0-9]*)/([a-z]*)$ ./index.php?user=$1&action=$2
RewriteRule ^user/([a-z]*)$ ./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来做其他事情。
答案 5 :(得分:0)
一种简单的方法是只将一个变量传递给index.php,就像这样
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ index.php?data=$1 [QSA]
并在index.php文件中执行此操作
$data = expload("/",$_GET['data']);
$user = $data[1];
$action = $data[2];
这个适用于所有情况,当你尝试传递许多变量时,当你执行类似
之类的操作时,它不适用于wasehttp://localhost/user/add/12/54/54/66
最后一个变量总是取值add/12/54/54/66
答案 6 :(得分:0)
简单就是试试吧!
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^game/([0-9]+)/([_-0-9a-zA-Z]+)/?$ index.php?user=$1&action=$2 [L,NC]
多数民众赞成!!
答案 7 :(得分:-1)
试试这很简单:
Options +FollowSymLinks
RewriteEngine on
RewriteRule index/user/(.*)/(.*)/ index.php?user=$1&action=$2
RewriteRule index/user/(.*)/(.*) index.php?user=$1&action=$2