.htaccess文件中$ 1 [QSA,L]是什么意思?


Answers:


215

并不是提供完整教程的地方,但是在这里简而言之;

RewriteCond的基本含义是“仅在为true时才执行下一个RewriteRule”。的!-l路径是该条件中,请求不是用于一个链路(!装置不是,-l连接工具)

重写规则基本上意味着,如果该请求被进行匹配^(.+)$(除了服务器根任何URL匹配)时,将被重写为index.php?url=$1这意味着为一个请求olle将被改写为index.php?url=olle)。

QSA表示如果原始网址传递了一个查询字符串,它将被追加到重写(olle?p=1将被重写为)index.php?url=olle&p=1

L 表示如果规则匹配,则不要再处理低于此规则的RewriteRules。

有关此的更多完整信息,请单击上面的链接。重写支持可能很难掌握,但是有很多关于stackoverflow的示例可以学习。


QSA替换?&,使其无法区分/page&foobarVS /page?foobar。如何阻止QSA替换?&
Pacerier

8

如果满足以下条件,则重写URL:
如果请求的文件名不是目录,

RewriteCond %{REQUEST_FILENAME} !-d

如果请求的文件名不是存在的常规文件,

RewriteCond %{REQUEST_FILENAME} !-f

如果请求的文件名不是符号链接,

RewriteCond %{REQUEST_FILENAME} !-l

然后以以下方式重写URL:
获取整个请求文件名,并将其作为index.php的“ URL”查询参数的值提供。将来自原始URL的所有查询字符串附加为进一步的查询参数(QSA),然后停止处理此.htaccess文件(L)。

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Apache文档#flag_qsa

另一个例子:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]

带有[QSA]标志的请求

/ pages / 123?one =两个

将被映射到

/page.php?page=123&one=two


0

这将捕获的请求像文件versionreleaseREADME.md等,这些应该是当作终点,如果定义(如在/释放的情况下),或者为“未找到”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.