【问题标题】:Routing To A Folder In Cakephp's App/Webroot路由到 Cakephp 的应用程序/Webroot 中的文件夹
【发布时间】:2011-11-02 16:16:03
【问题描述】:

我知道已经有一些关于这个主题的问题。我已经浏览了它们,但无法使任何建议的解决方案对我有用...也许有人可以帮助我解决我的具体问题?

我的 app/webroot 中有一个名为 parallax 的文件夹,其中包含 index.html 和相关文件。这可以在 /parallax/ 中很好地访问。但是,如果我尝试在 /parallax 访问它,我会被重定向到 /app/webroot/parallax/,理想情况下我想抑制这种行为。

将整个事情重构为一个 CakePHP 控制器动作并不是我想要的理想内容(尽管如果它可能比我预期的更简单,请告诉我)。据我所知,路由文件不允许路由到 app/webroot 中的文件。

另一个调用端口似乎是 .htaccess 文件。我尝试添加重写规则:

RewritRule ^parallax$ parallax/index.html

或其变体,但我能在这里得到的最好的结果是一个带有损坏图像的页面(无论我最终得到什么,它似乎都无法在 parallax/images 子文件夹中找到图像了) .

谁能解开我的困惑并帮助我找到 /parallax 的最佳路径,并给出与 /parallax/ 相同的结果?

【问题讨论】:

  • 我不确定什么是视差,但也许它可以通过页面控制器进入您的应用程序?
  • @Dunhamzzz 好的,但这是否需要将整个事情重新设计为视图和控制器操作,移动所有图像和 js 文件新家等?这显然可以花费一些时间和精力来完成,我只是想知道您是否可以将一个包含 html、图像和 javascript 文件的文件夹放入 app/webroot 并以无忧无虑的方式访问它,而无需完全重构为CakePHP 每次。我是否以某种可怕的方式错过了重点?
  • 完全没有,这取决于文件的复杂程度。看看PagesController 是否会为你做这件事。
  • @Dunhamzzz 好的,页面控制器看起来很有趣并且可能有用。问题是如果我将视差的内容转储到视图/页面中,我仍然有一堆图像和 js 文件现在无法正确链接,需要处理。不过可能是我进一步探索的途径。

标签: .htaccess cakephp mod-rewrite routes


【解决方案1】:

请在您的根目录而不是应用目录中尝试以下 .htaccess 代码。

<IfModule mod_rewrite.c>
   RewriteEngine on
   Rewriterule ^parallax/.*$ - [PT]
   RewriteRule ^$ app/webroot/    [L]
   RewriteRule (.*) app/webroot/$1 [L]
</IfModule>

这应该对您有所帮助。任何以视差开头的请求都将被 .htaccess 规则跳过。其余的事情将照原样工作。

【讨论】:

  • 我认为它适用于例如 parallax/index.html,但我不确定它是否适用于普通 /parallax?
  • 它对 /parallax 不起作用,因为没有 / 最后它会寻找一个名为 parallax 的 文件
  • 但这对我有用,我用它来将我的 phpmyadmin 文件夹放在服务器中。
【解决方案2】:

.htaccess root 感谢 Anh Pham 提供此链接,它完美运行 http://www.balistupa.com/blog/2010/08/how-to-redirect-appwebrootblog-into-blog-wordpress-cakephp/

<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} !^/foldername.*
RewriteCond %{REQUEST_URI} !-f
RewriteRule ^$ app/webroot/ [L]
RewriteCond %{REQUEST_URI} !^/foldername.*
RewriteCond %{REQUEST_URI} !-d
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>

【讨论】:

    【解决方案3】:

    我试图重现这种情况,但它对我来说是正确的。我正在使用 cakePhp 1.3,两个网址都将我发送到 index.html:

    http://localhost:5013/parallax/
    http://localhost:5013/parallax
    

    我的猜测是您的 .htaccess(位于 /app/webroot/ 的那个)上有一些奇怪的东西。我的是:

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

    基本上,它告诉服务器如果请求的 url 不是文件 (!-f) 也不是目录 (!-d),它会将整个 url 作为参数重定向到 /webroot/index.php ,所以cakephp 将解析 url 并调用控制器等等。

    希望对你有帮助

    【讨论】:

    • 嗯,我的 webroot .htaccess 确实包含所有这些行,因此有人在 RewriteEngine On 和第一个 RewriteCond 之间添加了一堆其他 RewriteRules(用于非常特定的路径)。我不知道在 conds 之前制定规则是否会以某种方式搞砸?在任何一种情况下,看起来在此处的条件之上添加视差重写规则可以将视差转换为视差/,这将在紧要关头起到作用,因此将我指向这个方向肯定会有所帮助!
    【解决方案4】:

    您应该能够将带有静态 index.html 的 parallax 文件夹放在 app/webroot 文件夹中,并且默认情况下可以通过 /parallax/ url 访问它。

    如果您使用相对路径,您甚至可以为该文件夹本地的该页面设置 img/css,并完全跳过通常的 cakephp 路径。不需要 htaccess。

    【讨论】:

    • /parallax/ 确实有效,但 /parallax 无效(嗯,确实有效,但它显示了 url 的完整 /app/webroot/ 路径)。也许我只是要求太多了。
    • 听起来您没有将 apache virtualHost 的 webroot 设置为 ///app/webroot 而是将其指向 /app 文件夹或根文件夹。如果您的路径设置正确,您将永远不会在地址栏中看到路径的 /app/webroot 部分。
    • 您是否尝试将 webroot 设置为 app/webroot 而不是 app 或根文件夹?
    猜你喜欢
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多