Por*_*080 10 php apache .htaccess mod-rewrite
我有一个URL http://localhost/index.php?user=1.当我添加此.htaccess文件
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^user/(.*)$ ./index.php?user=$1
Run Code Online (Sandbox Code Playgroud)
我现在将被允许使用http://localhost/user/1链接.但是http://localhost/index.php?user=1&action=update我怎么能进入http://localhost/user/1/update呢?
另外我该如何制作这个网址http://localhost/user/add?谢谢.对不起,我比较新.htaccess.
你可以写这样的东西:
RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)$ /index.php?user=$1&action=$2 [L]
Run Code Online (Sandbox Code Playgroud)
一种简单的方法是仅将一个变量传递给index.php,如下所示
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ index.php?data=$1 [QSA]
Run Code Online (Sandbox Code Playgroud)
在你的index.php文件中你这样做
$data = expload("/",$_GET['data']);
$user = $data[1];
$action = $data[2];
Run Code Online (Sandbox Code Playgroud)
这适用于所有情况,当您尝试传递许多变量时,如果您执行类似的操作,则它不起作用
http://localhost/user/add/12/54/54/66
Run Code Online (Sandbox Code Playgroud)
最后一个变量总是取值add/12/54/54/66
如果你想转
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
Run Code Online (Sandbox Code Playgroud)
要在PHP中查看参数:
<?php
echo "user id:" . $_GET['user'];
echo "<br>action:" . $_GET['action'];
?>
Run Code Online (Sandbox Code Playgroud)
在我看来,这比(.*)更加干净和安全,这基本上意味着几乎所有东西都被接受了.
感谢@enoise 和@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
Run Code Online (Sandbox Code Playgroud)
通过使用我得到的var_dump($_GET);链接localhost/user/1234/update
array (size=2)
'user' => string '1234' (length=4)
'action' => string 'update' (length=3)
Run Code Online (Sandbox Code Playgroud)
尽管localhost/user/add
array (size=2)
'user' => string '' (length=4)
'action' => string 'update' (length=3)
Run Code Online (Sandbox Code Playgroud)
这是我的目标。我只会用 PHP 在幕后做其他事情。