【问题标题】:What does $1 [QSA,L] mean in my .htaccess file?我的 .htaccess 文件中的 $1 [QSA,L] 是什么意思?
【发布时间】:2012-09-15 02:34:16
【问题描述】:

我需要更改我的.htaccess 并且有两行我不明白。

RewriteCond %{REQUEST_FILENAME} !-l

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

什么时候应该使用这些行?

【问题讨论】:

标签: .htaccess


【解决方案1】:

如果满足以下条件,则重写 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]

Apache docs #flag_qsa

另一个例子:

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

使用 [QSA] 标志,请求

/pages/123?one=two

将被映射到

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

【讨论】:

    【解决方案2】:

    这里不是给出完整教程的地方,但简而言之;

    RewriteCond 基本上意味着“仅当这是真的时才执行下一个 RewriteRule”。 !-l 路径是请求不是链接的条件(! 表示不是,-l 表示链接)

    RewriteRule 基本上意味着如果完成的请求匹配^(.+)$(匹配除服务器根目录之外的任何 URL),它将被重写为index.php?url=$1,这意味着对olle 的请求将被重写为index.php?url=olle)。

    QSA 表示如果有一个查询字符串与原始 URL 一起传递,它将附加到重写(olle?p=1 将被重写为index.php?url=olle&p=1

    L 表示如果规则匹配,则不再处理该规则以下的任何 RewriteRules。

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

    【讨论】:

    • QSA 将 ? 替换为 &,因此无法区分 /page&foobar/page?foobar。如何阻止 QSA 将 ? 替换为 &
    • 我相信记住所有可以建立关联的东西,例如:QSA 代表查询字符串附加; L 代表last(表示执行并停止寻找下一个巧合)
    • -d 目录.. -f 文件
    【解决方案3】:

    这将捕获对 version 等文件的请求, release, 和README.md 等应该是 被视为端点,如果定义(如在 /release 的情况下),或“未找到”。

    【讨论】:

      猜你喜欢
      • 2013-12-14
      • 2013-05-04
      • 2014-09-15
      • 2013-05-21
      • 2015-03-06
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多