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

yos*_*ssi 95 .htaccess

我需要改变我的.htaccess,有两行我不明白.

RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)

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

Joa*_*son 211

不是提供完整教程的地方,但在这里它是简短的;

RewriteCond基本上意味着"只有在这是真的时才执行下一个RewriteRule".的!-l路径是该请求不是用于一个链接的条件(!意味着不,-l意味着链路)

重写规则基本上意味着,如果该请求被进行匹配^(.+)$(除了服务器根任何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”代表查询字符串追加;`L` 代表最后(意味着执行并停止寻找下一个巧合) (2认同)

ant*_*ove 8

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

RewriteCond %{REQUEST_FILENAME} !-d
Run Code Online (Sandbox Code Playgroud)

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

RewriteCond %{REQUEST_FILENAME} !-f
Run Code Online (Sandbox Code Playgroud)

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

RewriteCond %{REQUEST_FILENAME} !-l
Run Code Online (Sandbox Code Playgroud)

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

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)