【问题标题】:Redirect URL with .htaccess to Subdirectory使用 .htaccess 将 URL 重定向到子目录
【发布时间】:2016-04-16 23:25:00
【问题描述】:

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

谢谢

【问题讨论】:

  • 我有点迷茫,你有什么问题?
  • 抱歉不清楚。问题是我将如何设置我的 htaccess,以便我可以使用 URL example.com/app 访问我的 CakePHP webroot,但如果我使用 URL example.com,则在索引 var/www/html 上。使用我当前的 htaccess,它将两个 URL 都重定向到 CakePHP webroot。
  • 您的 CakePHP 根目录在哪个目录中?
  • CakePHP 位于 /var/www/html 上的 app 文件夹中。里面还有一个index.html。
  • 您描述的方式非常令人困惑-不清楚(是的,我已经阅读了问题)您是否已将应用程序放入域中根目录 (/var/www/html) 或子文件夹中(例如,/var/www/html/app/app/webroot 存在)。 “app”出现在 url 中是不正常的。也不清楚您使用的是什么版本的 CakePHP,因为它与 3.x 不匹配我可以猜到您使用的是 2.x - 但我不需要猜测。请澄清您的问题。

标签: php .htaccess cakephp redirect


【解决方案1】:

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

您的文件夹结构:

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

在 var/www/html 里面添加 .htaccess 文件

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

【讨论】:

  • 我尝试了链接中给出的步骤并更改了 var/www/html 文件,但仍然收到 404 错误:在此服务器上找不到请求的 URL /webroot/。
  • 他们似乎更有可能 not 使用 3.x - 在这种情况下 the file you're suggesting to edit is part of the standard install - 建议编辑根不是一个好建议(如果是这样的话) .htaccess 文件
  • 感谢您的回答,我的 CakePHP 设置似乎有问题。我通过重新安装 CakePHP 并删除 /var/www/html 中的 .htaccess 来让它工作。
【解决方案2】:

你有 apache 配置的 root 访问权限吗?

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

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

我更熟悉在 Ubuntu 14.04 上执行此操作(我的示例特定于 ubuntu),但其他 Linux 发行版上的概念类似

启用别名模式:

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

然后在/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 不是强制性的,但这是更好的做法,因为它会阻止用户访问或查看应用程序目录中的其他文件夹

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

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

【讨论】:

  • 我尝试了简短的回答,但得到了 404 响应:在此服务器上找不到请求的 URL /webroot/。我正在使用 Amazon EC2 Linux 发行版。我有 root 访问权限,但我找不到 apache2 文件夹。
  • 我真的认为在您的情况下,将您的应用程序设置为别名是可行的方法。在快速谷歌之后,看起来你的 Linux 风格类似于 redhat/centos...请查看我刚刚添加的 Centos / RedHat 设置 apache 别名部分,看看是否有帮助跨度>
  • 感谢您的回答,我的 CakePHP 设置似乎有问题。我通过重新安装 CakePHP 并删除 /var/www/html 中的 .htaccess 来实现它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 2010-11-02
  • 1970-01-01
  • 2012-09-07
  • 2020-08-23
相关资源
最近更新 更多