Apache2 在 Phalcon PHP 框架中重写



默认情况下,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

需要更改哪些重写参数以仅访问第一类链接?

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

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

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

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

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>

最新更新