问题标签 [rewritemap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache - 如何检查 uri 是否存在于 rewritemap 中,否则转到 404 页面?
我的要求是检查重写映射文件中是否存在 url。如果不存在,它应该显示带有状态码 404 的自定义 404 页面。
最初这段代码的目的是:
它正在为 /invalid.html 加载自定义 404 页面。但是状态是200。接下来我将规则详细说明为goto ErrorDocument if not exist in map; 否则重定向。如下:
现在这条规则在第三行 RewriteCond ${plp-map:$1} ="" 失败并出现错误
$1 不应该总是返回网址吗?不知何故,我错过了将 url 传递给条件检查映射条目的部分。如何解决这个问题?我的问题还有更好的解决方案吗?
.net - 让 .NET RewriteMap 适用于带有或不带有斜杠的旧 URL
我在 web.config 文件中使用 RewriteMap 来(301)将旧 URL 重定向到新 URL。目前规则如下:
请注意,该模式有意对域进行硬编码,因为这是特定于每个域名的更大规则集的一部分。所以我一般不打算优化或重写(请原谅双关语)规则。
rewriteMap.config 文件包含以下重定向:
目前,当我访问该规则时,它可以正常工作http://example.com/old
- 它重定向到http://example.com/new
.
但是,当“旧”URL 包含尾部斜杠时,它不起作用,即http://example.com/old/
. 无论旧 URL 上是否存在斜杠,我都需要它工作。
我宁愿不必复制所有映射键。
非常感谢。
apache - 当 RewriteRule 与 RewriteMap 键不匹配时,如何获取原始请求 URL 作为默认值?
我正在使用 rewrite_mod 来重写 Web 服务请求。如果请求的 QUERY_STRING 包含某个参数,则 URL 会获取一些附加参数。这是我的重写条件。我还使用了定义键值对的 RewriteMap。当 RewriteCond 匹配时,键的值将被添加到重写的 URL。
一切正常,但现在我想在 RewriteRule 的替换中添加一个默认值,以防 RewriteMap 在 RewriteMap 文件中找不到键。RewriteRule 中的语法看起来像${ MapName : LookupKey | DefaultValue }
. 当找不到查找键时,将使用默认值。
我真正想要的是,当找不到密钥时,将使用原始请求 URL,并且不会进行替换。
我的第一个方法是使用${MapName:$1|http://%{HTTP_HOST}%{REQUEST_URI}?{QUERY_STRING}}
或${MapName:$1|http://%{HTTP_HOST}%{REQUEST_URI}}
但没有一个有效。我不知道在|
.
.htaccess - httpd.conf 中的 RewriteMap 和 .htaccess 中的 RewriteRule 冲突
我正在一个网站上工作,其中有许多短 URL,这些短 URL 被重定向到更大版本的 URL。这个想法是短 URL 是离线分发的,用户通常会记住它们并在浏览器地址栏中键入。例如:
http://www.example.com/abc应该重定向到http://www.example.com/higher_education/companion/politics/abc.html
还有一些外部链接。喜欢:http://www.example.com/google会将用户重定向到https://www.google.com
编辑 -
还有另一种情况是http://www.example.com/elementary/def.html重定向到http://www.example.com/elementary/xyz.html
但是,我们现在想用RewriteMap
. 我们为此编写的代码如下:
map.txt
包含:
问题是 .htaccss 文件还包含一些 RewriteRule。
因此,任何附带的请求都.html
将index.php
作为标准 CMS 功能提供。但是,现在代码进入重定向循环。如果有人分享一些信息以缓解这个问题,那就太好了。Apache 版本是 2.2,所以我不能在其中使用任何 IF-ELSE。
问候,
阿尼克
apache - 如何将 Apache 用于短 URL?
这是关于什么的?
我最近偶然发现了 Apache 是否可以用于通用短链接生成的问题?
为什么我更喜欢 Apache 而不是像你们这样的第三方软件?
当然,除了 Apache,还有其他选择,但让我们假设您被 Apache 困住并且不能使用任何 3rd 方软件......无论出于何种原因。
怎么做?
创建一个 RewriteRule 以将所有短 URL 与目标链接匹配。
shortlinks.txt 文件应如下所示:
这允许我调用 example.com/short4 以重写为 example.com/any/target/URL/you/want?even=with¶meters=nice,我认为这非常简洁。
这有什么帮助?
考虑您正在自动生成此 shortlinks.txt,即在 Drupal 中,甚至可能在不同单位的多个版本中生成,例如 short_crm short_finance 等...为每个部门重写一次,您就可以开始了。
最后...
这显然只是对您可以做什么的简要介绍,但是从这里开始的可能性几乎是无穷无尽的……如果有建设性的批评/建议或具体问题,将更新我的原始帖子:)
.htaccess - RewriteMap 无法防止盗链
我试图阻止图像的热链接并通过 RewriteMap 在 txt 文件中动态添加允许的主机,但不幸的是,条件不起作用。
这是VirtualHost的代码
以下是htaccess代码
以下是主机允许访问图像的 txt 文件行
请有人帮助我。
谢谢。
regex - 使用 RewriteMap 时正确的 Apache RewriteCond 和 RewriteRule?
我试图调试一些 apache 配置的问题,但是在使用 RewriteMap 时我无法让 apache 重写工作。
这是 /etc/apache2/map.txt 里面的内容
为了测试这一点,我提供了几个带有小脚本的 html 页面:
我几乎尝试了在论坛/谷歌中找到的所有变体,但没有一个可以使我的 RewriteCond 和 RewriteRule 工作。
我不知道我的虚拟主机中的正确设置:
我不太确定,但我认为我应该有多个 RewriteCond 和 RewriteRule 来匹配地图文件中所有这些不同的行。
另外我真的不知道如何使用地图文件中的值来匹配条件/规则。在某些示例中,人们指的是 1 美元和 2 美元,而有些则不是。
非常感谢任何帮助
url-rewriting - 用于子域映射的 IIS 重写映射
我正在尝试使用 IIS 中的重写映射功能编写动态子域重定向规则,因为我们的 DNS 服务器将 *.myapp.com 路由到同一个负载均衡器并最终路由到同一个应用程序。
这是我当前没有重写地图的工作实现(仅使用重定向规则):
现在,我想实现同样的目标,但允许我们的运营团队在不创建新的重定向规则的情况下实现上述目标,而只需在重写映射中添加新的映射条目即可。例如,只需执行以下操作:
我能够让重写映射与相对路径一起使用,但是当我指定 old-client.myapp.com -> new-client.myapp.com 之类的内容时,它似乎与条件不匹配。
此外,与我没有重写映射的当前工作实现一样,我希望这样做而不必特别提及“myapp.com”,而是使用通配符匹配。这样,我可以让重定向规则在以下所有场景中工作:
- old-client.localhost -> new-client.localhost(本地)
- 旧客户端.uat.myapp.com -> 新客户端.uat.myapp.com (UAT)
- 旧客户端.myapp.com -> 新客户端.myapp.com (PROD)
- 等(我们的开发人员可以指定自定义 url 用于测试目的 - 例如 mytestapp.com)
这是我在实现这一目标方面正在进行的一些工作:
注意:我已经在 SO / 其他来源中搜索了许多关于此的现有问题,但我相信没有什么特别涉及通过 Rewrite Maps使用通用规则进行子域重定向。
iis - IIS Redirection 301 一个链接只针对一个域而不影响其他域的链接
我有两个域,它们共享一个类似的链接,内容是 /games-for-cats。我想要的是例如将 games-for-cats 链接重定向到 FR 网站的另一个链接,但不改变其他域的 games-for-cats 链接。我正在使用 IIS 和 asp.net MVC,所以我尝试在 Web.Config 中执行此操作,但这不起作用。下面是我试图做的。
有人可以指导正确的重写规则是什么。
谢谢。
apache - Apache 2.4 RewriteMap 从不匹配
我正在使用 Apache RewriteMap 永久重定向 60 个左右的 url。在一个开发环境中,以下配置可以完美运行,而在另一个开发环境中它根本不起作用。最值得注意的是,最后一个RewriteCond
从未通过,不幸的是我尝试的日志记录选项没有帮助。使用LogLevel debug rewrite:trace8
,我可以看到RewriteCond
地图正在接收预期的输入之前,但地图仍然没有返回匹配项:
出于调试目的,我简化了将常量键传递给映射的事情,但映射仍然不返回替代值。我还尝试过简化映射文件,添加它可以接收的所有可能的键变体(有和没有前导/尾随斜杠和?)。我尝试重命名地图文件和扩展名,重命名地图本身,将地图文件移到公共目录之外,所有这些都没有改变结果。地图文件和它所在的目录一样是可读的,Apache 使用配置启动时没有错误,是的,我在测试配置更改时一直在重新启动它。
还有什么可以尝试的?两个系统都运行 CentOS 7、Apache 2.4,一个可以工作,一个不能。下面的配置
Apache 服务器级配置声明映射
RewriteMap help_center txt:/path/to/rewritemap/help_center.map
.htaccess
help_center.map 的缩略内容
更新
经过6个小时的调试,我终于可以让RewriteMap匹配了。通过将RewriteMap
指令移动到<VirtualHost _default_:443>
范围内/etc/conf.d/ssl.conf
,url 正在按预期重写。
为什么会这样?
除了虚拟主机之外,这两个环境之间的配置非常相似。两种环境都运行 SSL 并将所有请求重定向到 SSL 站点。工作的环境配置为没有基于名称的虚拟主机配置(即服务器的一个站点),而不起作用的环境是运行基于名称的虚拟主机。我有一个与此相关的假设:
虽然我希望 root 指令适用于默认站点和所有虚拟站点(包括 SSL),但也许该测试后,关闭RewriteMap
指令必须是虚拟主机范围,才能被虚拟主机引用。不确定这是否有意义,但我找不到任何文件来澄清。NameVirtualHost
没有任何变化:/
相关:似乎引用不存在的 RewriteMap 不会记录错误。也许它在我打开调试日志记录时被埋没了,但是是否有用于记录 RewriteMap 引用错误的配置?这将有助于更快地缩小我的调试范围。
最后,为了检查已解析的 Apache 配置,请从命令行运行:httpd -DDUMP_CONFIG -k start
或在 vi 中查看httpd -DDUMP_CONFIG -k start | vi -
。我能够使用它来确认我的 RewriteMap 指令正在加载,尽管它仍然不匹配。