重写规则如何在我给定的代码中工作?

时间:2016-01-22 05:55:03

标签: php .htaccess mod-rewrite

我已经完成了一些教程,但重写模块似乎不是一件容易学的东西。下面是我从一些教程网站获得的代码,但在那里几乎无法理解,我试过它工作正常,它将profile.php的地址更改为用户名,我看是否有人可以简单地解释如何重写wroks in这段代码。这可以帮助我理解这件事是如何运作的。

的.htaccess

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1 

如果我想将friends.php的地址更改为用户名/朋友,那么friends.php的代码是什么

1 个答案:

答案 0 :(得分:1)

以下是规则如何运作的基本描述: -

正则表达式

. (any character)
* (zero of more of the preceding)
+ (one or more of the preceding)
{} (minimum to maximum quantifier)
? (ungreedy modifier)
! (at start of string means "negative pattern")
^ (start of string, or "negative" if at the start of a range)
$ (end of string)
[] (match any of contents)
- (range if used between square brackets)
() (group, backreferenced group)
| (alternative, or)
\ (the escape character itself)
Using regular expressions, it is possible to search for all sorts of patterns in URLs and rewrite them when they match

<强>标志

标志被添加到重写规则的末尾,以告诉Apache如何解释和处理规则。它们可用于告诉apache将规则视为不区分大小写,如果当前匹配则停止处理规则,或者使用各种其他选项。它们以逗号分隔,并包含在方括号中。这是一个标志列表及其含义。

C (chained with next rule)
CO=cookie (set specified cookie)
E=var:value (set environment variable var to value)
F (forbidden - sends a 403 header to the user)
G (gone - no longer exists)
H=handler (set handler)
L (last - stop processing rules)
N (next - continue processing rules)
NC (case insensitive)
NE (do not escape special URL characters in output)
NS (ignore this rule if the request is a subrequest)
P (proxy - i.e., apache should grab the remote content specified in the substitution section and return it)
PT (pass through - use when processing URLs with additional handlers, e.g., mod_alias)
R (temporary redirect to new URL)
R=301 (permanent redirect to new URL)
QSA (append query string from request to substituted URL)
S=x (skip next x rules)
T=mime-type (force specified mime type)

例外与特殊情况

重写条件可以通过几种不同的方式进行测试 - 它们不需要被视为正则表达式模式,尽管这是最常用的方式。以下是处理重写条件的各种方法:

<Pattern (is test string lower than pattern)
>Pattern (is test string greater than pattern)
=Pattern (is test string equal to pattern)
-d (is test string a valid directory)
-f (is test string a valid file)
-s (is test string a valid file with size greater than zero)
-l (is test string a symbolic link)
-F (is test string a valid file, and accessible (via subrequest))
-U (is test string a valid URL, and accessible (via subrequest))

link也很有用。

希望它会对你有所帮助:)。