2017-03-04 56 views
1

我想匹配一个简单的规则来重写一个url,但它只是不匹配。我想 https://example.com/web/thanks/ 重定向到 https://example.com/thanks.phphtaccess - 简单的重写规则不触发

这是我已经试过

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,它返回“此规则未得到满足”。我究竟做错了什么?

+0

你真的想重定向而不是重写吗? “不触发”是什么意思?你会得到什么,404没有找到,500服务器错误,或其他? –

+0

最后一个应该工作,顺便说一句。至少应该将客户端重定向到PHP文件。 –

+0

由于https://example.com/web/thanks/实际上并不存在,我得到了404。通过不触发,我的意思是规则不匹配,我不会重定向。 – VeeK

回答

1

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

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

有以下改动

  • 没有RewriteBase,这只是一些相对URL

  • 可选尾随斜线/?相关,如果你想同时使用/web/thanks/web/thanks/工作

  • 没有域名,因为这可能会引发重定向,而不是重写,看到RewriteRule

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

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


模式^.*thanks/$^(.*)thanks/$也可以,但是它在thanks/结束,像/hellothanks/任何URL匹配, /areyousurethanks//some/path/thanks/,...

+0

谢谢奥拉夫,我需要这个动作,所以我会保留'^(。*)谢谢/ $'。我删除了'R'来删除重定向 – VeeK