我需要改变我的.htaccess
,有两行我不明白。
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
我什么时候应该使用这些行?
我需要改变我的.htaccess
,有两行我不明白。
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
我什么时候应该使用这些行?
不是提供完整教程的地方,但简而言之;
RewriteCond基本上意味着“仅当这是真的时才执行下一个 RewriteRule”。!-l
路径是请求不是链接的条件(表示!
不是,-l
表示链接)
RewriteRule基本上意味着如果完成的请求匹配(^(.+)$
匹配除服务器根目录之外的任何 URL),它将被重写为index.php?url=$1
,这意味着请求olle
将被重写为index.php?url=olle
)。
QSA
意味着如果有一个查询字符串与原始 URL 一起传递,它将被附加到 rewrite (olle?p=1
将被重写为index.php?url=olle&p=1
.
L
表示如果规则匹配,则不再处理低于此规则的任何 RewriteRules。
有关这方面的更完整信息,请点击上面的链接。重写支持可能有点难以掌握,但有很多关于 stackoverflow 的示例可供学习。
如果满足以下条件,则重写 URL:
如果请求的文件名不是目录,
RewriteCond %{REQUEST_FILENAME} !-d
如果请求的文件名不是存在的常规文件,
RewriteCond %{REQUEST_FILENAME} !-f
如果请求的文件名不是符号链接,
RewriteCond %{REQUEST_FILENAME} !-l
然后用以下方式重写 URL:
获取整个请求文件名并将其作为“url”查询参数的值提供给 index.php。将原始 URL 中的任何查询字符串附加为进一步的查询参数 (QSA),并停止处理此 .htaccess 文件 (L)。
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
另一个例子:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
使用 [QSA] 标志,请求
/pages/123?一=二
将映射到
/page.php?page=123&一=二
version
这将捕获对、
release
和等文件的请求README.md
,如果已定义(如 /release 的情况)或“未找到”,则应将其视为端点。