重定向有效,但直通无效

重定向有效,但直通无效

我们的 CMS 有一个名为 的处理程序root,其工作原理是:http://example.com/root提供我们想要它提供的功能。

我们希望获得“裸”域名的请求(http://example.com) 将由同一个处理程序自动处理——而不需要/root成为请求的一部分。

我期望“正常工作”——结果是 404:

RewriteRule ^/*$ /root [L]   # Results in 404

我能想到的最好的办法是重定向,它公开了名称root

RewriteRule ^/*$ /root [R=permanent,L]   # Works

如何在不重定向的情况下做到这一点?我尝试添加PT但没有成功...

答案1

RewriteRule ^/*$ /root [L]

这是可以的,但是,这是否有效取决于您的 CMS 如何读取请求的 URL。CMS 很可能会读取最初请求的 URL(包含在 HTTP 请求标头中),而不是内部写入的 URL。因此,CMS 看到的是/,而不是/root。如果它没有将其视为/有效路由,那么您将获得 404。

大多数 CMS 都会休息如果他们读取重写的 URL,因为大多数 CMS 使用前端控制器模式,并在内部将所有请求重写为通用脚本(“前端控制器”)。在这种情况下,读取重写的 URL 将毫无意义,因为它始终相同(即前端控制器的 URL)。

以这种方式重写请求的 URL 不适用于 WordPress、Joomla、Drupal 等。

只有当您的 CMS 提供了明确覆盖所请求 URL 的机制(例如,使用 URL 参数)时,您才能在服务器级别执行此操作,否则,您需要在 CMS 本身中配置此路由。(即最好改变URL/路由从/root/,而不是将其添加为“别名”,这可能会导致重复内容问题。)

相关内容