如何从 httacess 重定向中排除我的站点地图?

如何从 httacess 重定向中排除我的站点地图?

我希望重定向所有 URL,但根目录中的站点地图 xml 文件除外。htaccess 应该允许 https://old-domain/xml.xml 使用 HTTP 200 进行解析,但目前它仍在重定向到新域。我如何从重定向中排除文件 (xml.xml)?

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/xml\.xml$
RewriteCond %{HTTP_HOST} ^old-domain\.de$ [OR]
RewriteCond %{HTTP_HOST} ^www\.old-domain\.de$
RewriteRule (.*)$ https://new-domain.de/$1 [R=301,L]

</IfModule>

答案1

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

我实际上预计这会导致重写循环(500 内部服务器错误响应),因为代换字符串(表示 URL 路径)。

您可能会看到之前实施的 301 导致的缓存重定向永恒的重定向。301 会被浏览器永久缓存。(这就是为什么您应该始终使用 302(临时)重定向进行测试。)

您不应该重写相同的 URL,而应该根本不重写请求。这可以通过-代换细绳。

另外,我假设您没有在请求中包含尾部斜杠,因此正则/?表达式中的是多余的。 (.xml文件的默认处理程序无论如何都不允许路径信息,因此尾部斜杠可能会导致 404 - 除非重写。)

这里的标志NC应该是不必要的 - 您应该始终使用规范的 URL(我认为全部都是小写的)。

因此,上述规则应该改写如下:

RewriteRule ^xml\.xml$ - [L]

(请记住在正则表达式中用反斜杠转义文字点。)

这将阻止在请求时处理任何进一步的 mod_rewrite 指令/xml.xml

您的杂乱结束</IfModule>标记是否意味着您还有其他指令?不用说,这些重定向需要放在文件顶部附近.htaccess

测试前请清除浏览器(以及任何中间)缓存。测试时请打开浏览器检查器并在“网络”选项卡上选中“禁用缓存”。


选择

由于您只想排除一个 URL/文件被重定向,因此您可以将其作为现有重定向的一部分,作为额外的例外。

例如:

RewriteCond %{REQUEST_URI} !^/xml\.xml$
RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.de [NC]
RewriteRule (.*) https://new-domain.de/$1 [R=301,L]

前缀!否定了正则表达式。因此,当请求的 URL 与正则表达式不匹配时,它会成功^/xml\.xml$

或者,避免需要额外的状况

RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.de [NC]
RewriteRule !^xml\.xml$ https://new-domain.de%{REQUEST_URI} [R=301,L]

相关内容