【问题标题】:Is CakePHP's routing messing up my .htaccess 301 redirect?CakePHP 的路由是否弄乱了我的 .htaccess 301 重定向?
【发布时间】:2025-11-23 01:10:02
【问题描述】:

我刚刚将一个网站迁移到一个更新版本,但想为该网站的一些最常见的入口页面设置 301 重定向到他们的对应页面

这是我要添加到 .htaccess 中的规则:

Redirect 301 /oldhomepage.htm http://www.thesite.com/

它有点工作,但它重定向到

http://www.thesite.com/?url=oldhomepage.htm

这与 CakePHP 路由设置有冲突吗?

编辑:有人指出这可能是 .htaccess 冲突,确实如此。 CakePHP 会自动创建一个 .htaccess 文件(位于子目录中),其中包含以下内容:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

有什么方法可以让我轻松两全其美,让我简单的每页 301 重定向并保持 CakePHP 的路由?

【问题讨论】:

  • 这听起来更像是您的.htaccess 文件中的一个问题,但是如果没有看到整个事情就很难判断。如果是这样,它可能类似于我在这个答案中描述的情况:*.com/questions/3117012/…
  • 我添加了更新...根据您的评论,我仔细查看了,非常感谢。

标签: php apache .htaccess cakephp


【解决方案1】:

如果所有旧 URL 都以 .htm 结尾,而您的新 URL 都没有,您可以像这样编辑 CakePHP .htaccess 文件:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.htm$
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

【讨论】:

  • 确实没有一个新的网址可以做。我是否将此与此结合使用:Redirect 301 /oldhomepage.htm thesite.com ?
  • 是的。此修改应阻止?url=oldhomepage.htm,因此您可以保留原始文件原样,并且这些重定向将正常运行。
【解决方案2】:

为什么不在控制器中使用$this-&gt;redirect('http://www.thesite.com/', 301);

【讨论】:

  • 好吧,如果可以的话,我完全会从 cakePHP 路由器上完成,但你可能误解了我的意图。在客户的旧站点中,他们有一些 URL,例如 thesite.com/main.htm。在新站点上我没有 main.htm,所以我想确保 main.htm 的链接(尤其是 google 链接)被优雅地重定向到新主页。