Cakephp:使用.htaccess删除索引上的/ app / webroot

时间:2015-05-21 11:47:56

标签: apache .htaccess cakephp

我的.htaccess文件配置有一个小问题:

问题解释:

  • cakephp文档根目录位于我的域指向的根目录:www.example.com
  • 当我访问www.example.com时,它会重定向到www.example.com/app/webroot
  • 当我浏览更深层的目录时,一切正常,例如:www.example.com/Controller/action将不会在网址上安装app / webroot。

我的.htaccess:

根:

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

</IfModule>

/应用:

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

/应用/根目录

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

1 个答案:

答案 0 :(得分:0)

offical docs中提供的示例的唯一区别是RewriteBase指令的位置。

所以,我建议尝试以下(未经测试):

  • root/.htaccess

    • 删除RewriteBase /

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

    • 在此处添加RewriteBase指令并调整到您的文件夹

      <IfModule mod_rewrite.c>
          RewriteEngine On
      
          RewriteBase /path/to/cake/app
      
          # exclude dirs and files
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteCond %{REQUEST_FILENAME} !-f
      
          # prevent invalid assets from being parsed by CakePHP
          RewriteCond %{REQUEST_URI} !^/(webroot/)?(img|css|js)/(.*)$
      
          RewriteRule ^ index.php [L]
      </IfModule>
      

我认为Cake2使用QueryStringAppend(QSA)作为RewriteRule的index.php。 然后最后一条规则是RewriteRule ^(.*)$ index.php [QSA,L],但这取决于你的Cake版本。

旁注:启用Rewrite Logging for Apache。这有助于调试重写规则。不要忘记再次关闭它。

RewriteLogLevel 3
RewriteLog "/var/apache/logs/rewrite.log