【问题标题】:RewriteRule to bypass CakePHPRewriteRule 绕过 CakePHP
【发布时间】:2014-04-12 15:21:15
【问题描述】:

我正在尝试设置我的.htaccess 文件以将用户发送到我的网站空间上与 CakePHP 无关的单独文件夹。它与站点的逻辑无关,主要用于测试、部署挂钩等,所以 CakePHP 路由不是我所追求的。

我希望转到 mysite.com/test 的用户能够访问我的主机提供给我的公共 html 级别的 /test 文件夹(而不是寻找 TestsController)。

这是我在根目录.htaccess中的内容

Options -Indexes

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^test/?$ test/ [L]
    RewriteRule (.*) app/webroot/$1 [L]
    RewriteRule ^$ app/webroot/ [L]
</IfModule>

但输入mysite.com/test 会警告我

Error: TestController could not be found.
Error: Create the class TestController below in file: app/Controller/TestController.php

我认为RewriteRules 自上而下使用[L] 忽略后续行。然而,情况似乎并非如此。删除app/webroot 引用是我可以访问test/ 文件夹的唯一方法(即忽略CakePHP 甚至存在)。

我在这里做错了什么?

【问题讨论】:

  • 与调试重写时一样:开启日志记录! RewriteLogRewriteLogLevel 选项允许详细查看重写模块内部发生的情况。不要在黑暗中飞行,而是睁开眼睛!
  • 感谢@arkascha,现在就试试吧
  • 哎呀,RewriteLog 已被弃用(无法使用新方法)

标签: php .htaccess cakephp mod-rewrite


【解决方案1】:

一种选择是在您的蛋糕应用重写规则中使用RewriteCond。比如:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/test/
RewriteRule (.*) app/webroot/$1 [L]
#RewriteRule ^$ app/webroot/ [L]

【讨论】:

  • 谢谢@martymulligan,这行得通。在每个RewriteRule 上方添加RewriteCond。但是为什么我必须创建一个条件,当我说 “我认为 RewriteRules 自上而下地工作而 [L] 忽略后续行”时,我错了吗?
  • 我相信你是对的。我认为问题可能出在您的测试重写规则上。我想我会这样写:RewriteRule ^test/(.*) test/$1 [L]
猜你喜欢
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2013-12-14
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多