好吧,自从我使用mod重写以来我已经有一段时间了,我之前创建了几个mod重写并忘记了他们做了什么,我想知道这个代码片段到底做了什么。有人可以尽可能详细地说明代码片段的作用。谢谢!
这是我的mod重写代码。
RewriteRule ^/?sitemap.xml?$ sitemap.php [L,NC,QSA]
答案 0 :(得分:2)
基本上,任何查找sitemap.xml的内容都会传递给sitemap.php,但不会向用户显示,也就是说,该用户的网址不会更改。以下是一些文档:
RewriteRule pattern target [Flag1,Flag2,Flag3]
<强>→|最后强>
[L]标志使mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。
如果您在.htaccess文件或部分中使用RewriteRule,那么了解规则的处理方式非常重要。这种简化形式是,一旦处理了规则,重写的请求就会被传回URL解析引擎,以便对其进行处理。可能的是,当处理重写的请求时,可能再次遇到.htaccess文件或部分,因此可以从开始再次运行规则集。最常见的情况是,如果其中一个规则导致重定向(内部或外部)导致请求进程重新开始,则会发生这种情况。
因此,重要的是,如果您在其中一个上下文中使用RewriteRule指令,则采取明确的步骤来避免规则循环,并且不仅仅依靠[L]标志来终止执行一系列规则,如图所示下方。
此处给出的示例将重写对index.php的任何请求,将原始请求作为查询字符串参数提供给index.php,但是,如果请求已经用于index.php,则将跳过此规则。
RewriteCond %{REQUEST_URI} !index\.php
RewriteRule ^(.*) index.php?req=$1 [L]
<强> NC | NOCASE 强>
使用[NC]标志会使RewriteRule以不区分大小写的方式匹配。也就是说,它不关心字母在匹配的URI中是以大写形式还是小写形式出现。
在下面的示例中,对图像文件的任何请求都将代理到您的专用图像服务器。匹配不区分大小写,因此.jpg和.JPG文件都是可接受的,例如。
RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC]
<强> QSA | qsappend 强>
当替换URI包含查询字符串时,RewriteRule的默认行为是丢弃现有的查询字符串,并将其替换为新生成的查询字符串。使用[QSA]标志会导致查询字符串合并。
考虑以下规则:
RewriteRule /pages/(.+) /page.php?page=$1 [QSA]
使用[QSA]标记,/pages/123?one=two
的请求将映射到/page.php?page=123&one=two
。如果没有[QSA]标志,相同的请求将映射到/page.php?page=123
- 也就是说,现有的查询字符串将被丢弃。
答案 1 :(得分:0)
当请求“sitemap.xm”时,请将请求重定向到“sitemap.php”。 “L”表示离开(或跳过任何以下规则)
请注意
QSA标志与查询字符串处理(结合旧的和新的)有关。我找不到关于 NC 的任何信息。
引用具有full detail(Apache)。