【问题标题】:htaccess - Simple rewrite rule not triggeringhtaccess - 简单的重写规则不触发
【发布时间】:2017-03-04 12:33:41
【问题描述】:

我正在尝试匹配一个简单的规则来重写一个 url,但它只是不匹配。我想重定向 https://example.com/web/thanks/https://example.com/thanks.php

这是我尝试过的

RewriteEngine On
RewriteBase /
RewriteRule ^thanks/$ https://example.com/thanks.php [R=302,L]

RewriteEngine On
RewriteRule ^thanks/$ https://example.com/thanks.php [R=302,L]

RewriteEngine On
RewriteBase /
RewriteRule ^/(.*)/thanks/$ https://example.com/thanks.php [R=302,L]

RewriteEngine On
RewriteBase /
RewriteRule ^web/thanks/$ https://example.com/thanks.php [R=302,L]

还有更多微小的变化,但没有一个会触发。我尝试使用 this online tool 并返回“未满足此规则”。我做错了什么?

【问题讨论】:

  • 您真的要重定向而不是重写吗? “不触发”是什么意思?你得到了什么,404 未找到,500 服务器错误,还是其他什么?
  • 最后一个应该可以工作,顺便说一句。至少应该将客户端重定向到 PHP 文件。
  • 我得到一个 404,因为 example.com/web/thanks 实际上并不存在。不触发,我的意思是规则不匹配,我没有被重定向。
  • 是的,我想重写。所以网址保持不变。我想当它起作用时会发生什么?
  • 所以/web/thanks 不会重定向。当您输入/web/thanks/带有斜杠)时,您会被重定向吗?使用最后一条规则时。

标签: apache .htaccess mod-rewrite


【解决方案1】:

要重写,只需使用最后一条规则

RewriteRule ^web/thanks/?$ /thanks.php [L]

进行以下更改

  • 没有RewriteBase,这仅与一些相对URL相关

  • 可选的尾随斜杠 /?,如果您希望 /web/thanks/web/thanks/ 都起作用

  • 没有域名,因为这可能会触发重定向而不是重写,请参阅RewriteRule

    绝对网址
    如果指定了绝对 URL,mod_rewrite 会检查主机名是否与当前主机匹配。如果是这样,则方案和主机名将被删除,并且生成的路径将被视为 URL 路径。否则,将对给定 URL 执行外部重定向。要强制将外部重定向回当前主机,请参阅下面的 [R] 标志。

  • 没有R|redirect标志,因为这会触发重定向而不是重写


^.*thanks/$^(.*)thanks/$ 模式也有效,但它匹配任何以 thanks/ 结尾的 URL,例如 /hellothanks//areyousurethanks//some/path/thanks/、...

【讨论】:

  • 谢谢奥拉夫,我需要那个动作,所以我会保留^(.*)thanks/$。我删除了R 以删除重定向
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 2016-09-14
  • 2017-10-06
  • 1970-01-01
  • 2023-04-02
  • 2011-09-23
相关资源
最近更新 更多