【问题标题】:Apache2 Rewrite in Phalcon PHP FrameworkPhalcon PHP 框架中的 Apache2 重写
【发布时间】:2014-02-07 03:56:12
【问题描述】:

默认情况下,PhalconPHP 提供这种类型的文件夹结构:

project/
   app/
      controllers/
      models/
      views/
   public/
      css/
      img/
      js/
      index.php

还有 2 个 .htaccess 文件

#/project/.htaccess
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule  ^$ public/    [L]
   RewriteRule  (.*) public/$1 [L]
</IfModule>

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

它适用于以下链接:1) site.com/controller/method

但也将公共作为第一部分:2) site.com/public/controller/method

需要更改哪些 Rewrite 参数以仅对第一类链接具有访问权限?

【问题讨论】:

    标签: php apache .htaccess phalcon


    【解决方案1】:

    尝试将其添加到第一个块中:

    RewriteCond %{THE_REQUEST} \ /+public/
    RewriteRule ^public/(.*)$ /$1 [L,R]
    

    比如:

    #/project/.htaccess
    <IfModule mod_rewrite.c>
       RewriteEngine on
    
       RewriteCond %{THE_REQUEST} \ /+public/
       RewriteRule ^public/(.*)$ /$1 [L,R]
    
       RewriteRule  ^$ public/    [L]
       RewriteRule  (.*) public/$1 [L]
    </IfModule>
    

    【讨论】:

    • 没有任何改变,两种类型的访问相同,如果它是有效的控制器/方法,但没有公共作为 URL 中的第一段,是否有任何重定向规则?
    【解决方案2】:

    您没有将文档根目录指向公用文件夹,这意味着您可以,如您所说,使用或不使用公共前缀访问它。这会导致问题,但是,我会告诉你如何解决它。

    确保您的虚拟主机使用目录“/path/to/project/public”作为文档根目录,这将确保所有请求都路由到公共文件夹内的 index.php。该文件将自动查找文档根目录之外的所有其他内容。

    删除项目文件夹根目录下的 .htaccess 文件,使用这种方法是多余的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 2016-01-17
      • 1970-01-01
      相关资源
      最近更新 更多