.htaccess重写不存在的网址

时间:2017-12-04 15:42:56

标签: apache .htaccess redirect mod-rewrite

目前,我正在与一些喜欢短网址的人在发布社交媒体时进行营销。

他们有https://www.example.com/folder/subfolder

对于他们的营销,他们希望https://www.example.com/mysuperbuzzword指向第一个网址,但在浏览器中,您仍会看到较短的网址。

我的第一个想法是“我只会在.htaccess”中添加重写规则

Redirect 301 /mysuperbuzzword /folder/subfolder/这样的东西会起作用,但网址会发生变化。

我做了一些阅读并发现了[P]标志。然后我尝试了这个:

RewriteCond %{REQUEST_URI} ^/vanityurl RewriteRule ^(.*)$ /folder/subfolder [P]

我现在遇到的问题是因为/vanityurl不存在,而不是重写,我只是得到404错误。

我一直在使用.htaccess规则检查工具测试我的规则,并且它吐出的网址看起来是正确的,但同样,我只是得到了404.

enter image description here

此外,如果您使用标记[PT],则会找到资源,但地址栏中的URL已更改。

1 个答案:

答案 0 :(得分:1)

您使用永久重定向进行了测试。永远不要那样做。它由浏览器缓存,浏览器将不再向服务器发出请求。这是可能的,因为这样的重定向应该是......好的......永久的。如果您必须测试重定向,请使用临时重定向(302)对其进行测试,如果一切正常,请稍后更改。

使用mod_rewrite,您可以做三件事:

  • 进行内部重写。如果您在内部将 url a 重写为 url b ,则用户会看到 url a ,但 url b 正在在服务器上执行。
  • 执行外部重定向。如果您从外部将 url a 重定向到 url b ,则会发回回复:“请请求 url b 。”。然后,浏览器使用 url b 向服务器发送另一个请求,并相应地更改地址栏中的URL。
  • 执行代理请求。如果您将 url a 代理到 url b ,则用户请求 url a 。然后,服务器打开http连接并请求 url b 。然后它等待响应并返回到客户端的通道。通过mod_rewrite做这样的事情是非常昂贵的。

您只想做的是:

RewriteRule ^vanityurl$ /folder/subfolder [L]

这是一个简单的内部重写。