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

时间:2016-04-16 23:25:01

标签: php .htaccess cakephp redirect

我在同一个服务上运行一个网站和一个CakePHP服务器。 CakePHP位于子目录中。我希望将网址http://www.example.com指向我的root.html中的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>

修改

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

谢谢

2 个答案:

答案 0 :(得分:0)

您是否拥有apache config的root权限?

我猜你的蛋糕应用并不是你想要在这个域上运行的唯一内容,所以你想在/app上将其设置为别名?

我建议首先在apache配置中将/app设置为Alias。

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

启用别名mod:

sudo a2enmod alias

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

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

然后在.htaccess

中的/app/webroot文件中重写基数
<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设置apache别名

将其添加到/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>

对您的问题的简短回答

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

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

答案 1 :(得分:0)

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

您的文件夹结构:

"/bin/ls"

在var / www / html内添加.htaccess文件

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