Htaccess - 使用get var静静地将漂亮的URL转换为php脚本

时间:2010-12-15 10:56:42

标签: .htaccess

我正在使用PHP,我想使用这样的网址:

http://www.example.com/username,

而不是使用这样的查询字符串:

profile.php?u=username

如何设置我的.htaccess文件来执行此操作?

2 个答案:

答案 0 :(得分:3)

这样的事情:

 RewriteCond %{REQUEST_FILENAME} !profile.php
 RewriteRule ^(.*)$ /profile.php?user=$1 [L]

这会将域名之后的任何内容作为名为user的GET变量传递给http://www.example.com/profile.php

所以这个:

 http://www.example.com/User123

将成为:

 http://www.example.com/profile.php?user=User123

这将以静默方式发生,因此当您的服务器看到丑陋的profile.php网址时,浏览器仍然会向用户显示“漂亮”example.com/User123版本。


由于您要求对正在发生的事情进行更全面的解释,所以它是:

RewriteRule有点像if语句。基本上你说“如果请求符合这种模式,请将请求重定向到另一个文件。”

我们匹配的模式是^(.*)$,其细分如下:

  • ^表示“开始在字符串的最开头查找匹配项
  • .*表示“匹配任何字符的任意数字(*)(.
  • $表示“在字符串末尾停止匹配。

将这些组合在一起时,它基本上等于“匹配任何请求。”

.*周围的括号告诉mod_rewrite存储与变量中包含的规则部分相匹配的任何内容。它们存储的变量称为$1(如果我们有多组括号,它们将存储在$2$3中,依此类推。)

$1变量用于定义RewriteRule最后一部分中指定的新路径。

RewriteCond就像在RewriteRule周围抛出另一个if语句。它说“如果这个条件成立,只执行下面的RewriteRule”。

在你的情况下,如果URL(%{REQUEST_FILENAME}中请求的文件不是“profile.php”,RewriteCond表示只执行规则

这意味着对“profile.php”的请求正常处理,但对其他任何内容的请求都被重定向到指向profile.php。

最后的[L]意味着“在此之后不执行任何RewriteRules”。 L代表“Last”。

清除泥土?

答案 1 :(得分:-1)

RewriteEngine On
RewriteRule http://www.example.com/(.*) profile.php?u=$1