首页 文章

使用.htaccess将URL重定向到子目录

提问于
浏览
-1

我在同一个服务上运行一个网站和一个CakePHP服务器 . CakePHP位于子目录中 . 我希望URL http://www.example.com指向root中的index.html,然后http://www.example.com/app重定向到CakePHP webroot .

这些是我当前的.htaccess文件

在var / www / html中:

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

在var / www / html / app中:

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

在var / www / html / app / webroot中:

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

Edit

问题是如何设置我的htaccess,以便我可以使用URL http://www.example.com/app访问我的CakePHP webroot,但如果我使用URL http://www.example.com,则可以使用索引var / www / html . 使用我当前的htaccess,它将两个URL重定向到CakePHP webroot .

谢谢

2 回答

  • 0

    答案:https://stackoverflow.com/a/33018144/1127933

    你的文件夹结构:

    /var/www/html/
      .htaccess <----- edit
      index.html
      app/ <------ cakephp
        bin/
        config/
        src/
        ...
    

    Inside var/www/html add .htaccess file

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

    你有root访问apache配置吗?

    我猜你的蛋糕应用程序不是你想在这个域上运行的唯一的东西,所以你想在 /app 上设置它作为别名?

    我建议首先在apache配置中将 /app 设置为别名 .

    我更熟悉在Ubuntu 14.04上这样做(我的例子特定于ubuntu),但其他Linux发行版的概念类似

    启用别名mod:

    sudo a2enmod alias
    

    使用nano或其他喜欢的文本编辑器,您需要将文件添加到apache配置:

    sudo touch /etc/apache2/sites-available/mycakeapp.alias.conf
    sudo nano /etc/apache2/sites-available/mycakeapp.alias.conf
    

    对于文件内容:

    Alias /app "/var/www/html/app/webroot"
    <Directory "var/www/html/app/webroot">
        Options Indexes FollowSymLinks
        Order allow,deny
        Allow from all
    </Directory>
    

    启用配置文件,以便apache知道加载它:

    cd /etc/apache2/sites-available
    sudo a2ensite mycakeapp.alias.conf
    

    重新启动apache以加载新配置:

    sudo service apache2 restart
    

    然后在 /app/webroot 中重写 .htaccess 文件中的基数

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

    完成 . http://www.example.com/app 现在将指向并充当您的应用程序基目录

    其他.htacess文件 /.htaccess/app/.htaccess 可以删除,因为它们永远不会被命中 . 没有必要将虚拟主机直接指向webroot,但这是更好的做法,因为它会阻止用户访问或查看app目录中的其他文件夹

    Centos / RedHat setting up apache alias

    将其添加到 /etc/httpd/conf/httpd.conf 文件的底部并重新启动Apache应该可以解决问题 . service httpd restart

    Alias /app "/var/www/html/app/webroot" #make sure this is actually your applications root
    <Directory "var/www/html/app/webroot">
        Options Indexes FollowSymLinks
        Order allow,deny
        Allow from all
    </Directory>
    

    The Short Answer to your question

    如果您没有apache配置的root访问权限,或者只是想跳过别名添加步骤,您只需将 RewriteBase /app 行添加到您的webroots .htaccess

    删除或编辑 /var/www/html 中的 .htaccess ,以便 myexample.com/ 不会重定向到蛋糕应用

相关问题