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

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

 RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] 

当我应该使用这些线?

不是给一个完整的教程的地方,但这里是简短的;

RewriteCond基本上是指“只有在这种情况下才执行下一个RewriteRule”。 !-lpath是请求不是链接的条件( !表示不是, -l表示链接)

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

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

L意味着如果规则匹配,不要在这个之下处理更多的RewriteRules。

要获得更完整的信息,请点击上面的链接。 重写支持可能有点难以理解,但是在stackoverflow上学习的例子还是不less的。

如果以下条件成立,则重写url:
如果请求的文件名不是目录,

 RewriteCond %{REQUEST_FILENAME} !-d 

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

 RewriteCond %{REQUEST_FILENAME} !-f 

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

 RewriteCond %{REQUEST_FILENAME} !-l 

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

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

这将捕获对versionreleaseREADME.md等文件的请求,这些文件应被视为端点,如果已定义(如/ release),或者“未find”。

我要省下10秒的时间

QSA意味着如果有一个查询string与原始URL一起传递 ,它将被附加到重写( olle?p=1将被重写为index.php?url=olle&p=1 )。