Mod rewrite 修改问题

Mod rewrite 修改问题,mod-rewrite,Mod Rewrite,好吧,我已经有一段时间没有使用mod rewrite了,我很久以前创建了几个mod rewrite,但忘记了它们做了什么,我想知道这个代码片段到底做了什么。请有人尽可能详细地说明这个片段的作用。谢谢 这是我的mod重写代码 RewriteRule ^/?sitemap.xml?$ sitemap.php [L,NC,QSA] 当请求“sitemap.xm”时,将请求重定向到“sitemap.php”。“L”指休假(或跳过以下任何规则) 注 QSA标志与查询字符串处理有关(结合新旧)。我找不到关

好吧,我已经有一段时间没有使用mod rewrite了,我很久以前创建了几个mod rewrite,但忘记了它们做了什么,我想知道这个代码片段到底做了什么。请有人尽可能详细地说明这个片段的作用。谢谢

这是我的mod重写代码

RewriteRule ^/?sitemap.xml?$ sitemap.php [L,NC,QSA]
当请求“sitemap.xm”时,将请求重定向到“sitemap.php”。“L”指休假(或跳过以下任何规则)


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


该引用具有(Apache)。

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

摘自:

重写规则模式目标[Flag1、Flag2、Flag3]

L|last

[L]标志导致mod_rewrite停止处理规则集。在大多数上下文中,这意味着如果规则匹配,则不会处理进一步的规则

如果您在.htaccess文件或节中使用RewriteRule,了解规则的处理方式非常重要。这种方法的简化形式是,一旦处理了规则,重写后的请求将返回给URL解析引擎,以执行可能的操作。在处理重写请求时,可能会再次遇到.htaccess文件或节,因此可以从一开始就再次运行规则集。最常见的情况是,如果其中一个规则导致重定向(内部或外部重定向),导致请求过程重新启动,则会发生这种情况

因此,如果在其中一个上下文中使用RewriteRule指令,则必须采取明确步骤避免规则循环,而不是仅依靠[L]标志来终止一系列规则的执行,如下所示

这里给出的示例将重写index.php的任何请求,将原始请求作为index.php的查询字符串参数提供给index.php,但是,如果该请求已经针对index.php,则将跳过此规则

RewriteCond%{REQUEST\u URI}!索引\.php
RewriteRule^(.*)index.php?req=$1[L]

NC|nocase

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

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

RewriteRule(.*\(jpg | gif | png))$$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
——也就是说,现有的查询字符串将被丢弃。

这将作为搜索引擎的sitemap.xml传递吗?只要sitemap.php模仿正确的xml内容,调用方不应该得到sitemap.xml不存在的任何指示。