我正在使用PHP,我想使用这样的网址:
http://www.example.com/username,
而不是使用这样的查询字符串:
profile.php?u=username
如何设置我的.htaccess
文件来执行此操作?
答案 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