页面可以通过 CakePHP 中的绝对胡言乱语网址访问


Pages are accessible through absolute gibberish urls in CakePHP?

My CakePHP(v2.5.5)应用程序有一个动态站点地图,它使用各种方法来生成链接(例如/sitemap/career-center),然后将这些链接传递给Router::url($generated_url, true)

我的站点地图应该在网址http://example.com/sitemap(默认路线)上可用 - 工作正常。但是,出于某种原因,Google在疯狂的网址上找到了我的站点地图,例如:

  • http://www.example.com/index.php/forums/general/pt-ceus/js/views/jobs/general/img/og/pt-jobs/pt-ceus/general/general/sitemap
我们甚至没有系统中的

任何地方都有论坛,也没有提到任何论坛。 pt-jobspt-ceusgeneral都是我们网站的不同区域。 jsimg等是包含静态资产的目录。但是由于某种原因,这已成功路由到我的站点地图。

反过来,在这个随机网址上找到的站点地图会使用相同的胡言乱语填充其中的每个链接,使网站站长工具饱和 500 个错误。出于某种原因,站点地图可以通过该无意义的网址访问,但是在站点地图中生成的链接使用相同的结构都会产生错误(如预期的那样)。

我的问题是这样的:

  • 你知道发生了什么吗?
  • 谷歌是如何找到这些随机网址的,为什么它们能成功路由到我的站点地图?

如果您需要更多信息,请告诉我,我会更新该信息。

一位同事发现了这个问题的根源。

以下是信息:

  • 此错误仅在某些环境中发生。不确定是什么原因导致生产、QA 等之间的差异,但并非所有情况下都会发生此行为。

点击网址,例如:http://www.example.com/index.php/sdfasdfjklasdjfkl/x/asdkfjasd/asdfasdfeww/sitemaps/

为您提供以下内容:

[base] => /index.php/sdfasdfjklasdjfkl/x/asdkfjasd/asdfasdfeww
[webroot] => /index.php/sdfasdfjklasdjfkl/x/asdkfjasd/asdfasdfeww/ 

在检查 CakePHP 文件 CakeRequest.php 时,发现了以下注释:

 276  * If CakePHP is called with index.php in the URL even though
 277  * URL Rewriting is activated (and thus not needed) it swallows
 278  * the unnecessary part from $base to prevent issue #3318.
 279  *
 280  * @return string Base URL
 281  * @link https://cakephp.lighthouseapp.com/projects/42648-cakephp/tickets/3318

我们不知道这个问题#3318是什么 - 但似乎对该问题的"修复"导致这些冗长的疯狂网址正常工作。在我们的例子中,这导致这些奇怪的网址反映在正在生成的站点地图中。

注意:这并没有回答谷歌是如何生成和访问这些疯狂的网址的,但它确实解释了它们为什么有效。

我们的解决方案只是简单地禁止带有索引的 url.php因为在我们的例子中启用了 url 重写。