2010-12-17 114 views
0

好吧,自从我使用mod重写以来,我已经有一段时间了,我之前创建了几个mod重写,并忘记了他们做了什么,我在想这段代码片段究竟做了什么。有人可以尽可能详细地了解片段的功能。谢谢!Mod重写问题

这是我的mod重写代码。

RewriteRule ^/?sitemap.xml?$ sitemap.php [L,NC,QSA] 

回答

2

基本上,任何寻找sitemap.xml的东西都会传递给sitemap.php,但是没有它向用户显示,也就是说,url不会为用户更改。下面是一些文档:

Apache mod_rewrite Flags摘自:

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\.phpRewriteRule ^(.*) index.php?req=$1 [L]

NC | NOCASE

使用[NC]标志的使重写规则以不区分大小写的方式进行匹配。也就是说,它不关心在匹配的URI中字母是大写还是小写。

在下面的示例中,对图像文件的任何请求都将被代理到您的专用图像服务器。例如,匹配不区分大小写,因此.jpg和.JPG文件都可以接受。

RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com $1 [P,NC]

QSA | qsappend

当更换URI包含查询字符串,重写规则的默认行为是放弃现有的查询字符串,并与新生成的更换。使用[QSA]标志会导致查询字符串被合并。

考虑以下规则:

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

随着[QSA]标志,用于/pages/123?one=two的请求将被映射到/page.php?page=123&one=two。如果没有[QSA]标志,那个相同的请求将被映射到/page.php?page=123 - 也就是说,现有的查询字符串将被丢弃。

0

当“sitemap.xm”被请求时,请求将请求重定向到“sitemap.php”。 “L”表示离开(或跳过任何以下规则)

注意
QSA标志与查询字符串处理(新老结合)有关。我找不到关于NC的任何信息。

该参考文献有full detail(Apache)。

+0

这是否会作为搜索引擎的sitemap.xml传递? – HELP 2010-12-17 01:12:03

+0

只要sitemap.php没有模仿正确的xml内容,调用者就不应该得到任何指示sitemap.xml不存在的迹象。 – frayser 2010-12-17 01:22:57