使用.htaccess的漂亮网址

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.

den*_*ise 6

你可以写这样的东西:

RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)$ /index.php?user=$1&action=$2 [L]
Run Code Online (Sandbox Code Playgroud)


Kha*_*lid 6

一种简单的方法是仅将一个变量传递给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

  • “expload”听起来很不错。 (2认同)

mog*_*lin 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
Run Code Online (Sandbox Code Playgroud)

要在PHP中查看参数:

<?php 
echo "user id:" . $_GET['user'];
echo "<br>action:" . $_GET['action'];
?>
Run Code Online (Sandbox Code Playgroud)
  • .htaccess中的括号是您稍后可以调用的组.1美元,2美元等
  • 我添加的第一组([0-9]*)表示它将获得任何数字(1,34等).
  • 第二组表示任何字符(a,abc,update等).

在我看来,这比(.*)更加干净和安全,这基本上意味着几乎所有东西都被接受了.


Por*_*080 1

感谢@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 在幕后做其他事情。