我需要更改我的内容.htaccess
,有两行我不理解。
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
什么时候应该使用这些行?
我需要更改我的内容.htaccess
,有两行我不理解。
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
什么时候应该使用这些行?
Answers:
并不是提供完整教程的地方,但是在这里简而言之;
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的示例可以学习。
?
到&
,使其无法区分/page&foobar
VS /page?foobar
。如何阻止QSA替换?
为&
?
如果满足以下条件,则重写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]
另一个例子:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
带有[QSA]标志的请求
/ pages / 123?one =两个
将被映射到
/page.php?page=123&one=two