我的CakePHP(v2.5.5)应用程序有一个动态站点地图,它使用各种方法生成链接(例如/sitemap/career-center
),然后将这些链接传递给Router::url($generated_url, true)
。
我的站点地图应该在网址http://example.com/sitemap
(默认路由)上可用 - 这工作正常。但是,出于某种原因,谷歌正在疯狂的网址上找到我的网站地图,例如:
http://www.example.com/index.php/forums/general/pt-ceus/js/views/jobs/general/img/og/pt-jobs/pt-ceus/general/general/sitemap
我们的系统中没有任何论坛,或者任何提及的论坛。 pt-jobs
,pt-ceus
和general
都是我们网站的不同区域。 js
,img
等是包含静态资源的目录。但出于某种原因,这是成功路由到我的站点地图。
反过来,在这个随机网址上找到的网站地图会使用相同的乱码填充其中的每个链接,使网站管理员工具饱和500个错误。出于某种原因,站点地图可以通过该非感知网址访问,但在站点地图中使用相同结构生成的链接都会产生错误(如预期的那样)。
我的问题是:
如果您需要更多信息,请告诉我,我会更新该信息。
答案 0 :(得分:0)
一位同事发现了这个问题的根源。
以下是信息:
点击如下的网址: 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是什么 - 但似乎该问题的'修复'导致这些长期疯狂的网址工作。在我们的例子中,这导致这些奇怪的网址反映在正在生成的站点地图中。
注意:这并没有回答谷歌如何生成这些疯狂的网址并开始接触它们,但这确实解释了它们的工作原理。
我们的解决方案是简单地禁止使用index.php的网址,因为在我们的情况下启用了网址重写。