Mod重写问题

时间:2010-12-17 01:03:35

标签: mod-rewrite

好吧,自从我使用mod重写以来我已经有一段时间了,我之前创建了几个mod重写并忘记了他们做了什么,我想知道这个代码片段到底做了什么。有人可以尽可能详细地说明代码片段的作用。谢谢!

这是我的mod重写代码。

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

2 个答案:

答案 0 :(得分:2)

基本上,任何查找sitemap.xml的内容都会传递给sitemap.php,但不会向用户显示,也就是说,该用户的网址不会更改。以下是一些文档:

取自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\.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)。