【问题标题】:Apache alias for Laravel and LumenLaravel 和 Lumen 的 Apache 别名
【发布时间】:2015-07-06 04:38:24
【问题描述】:

我正在尝试在我的服务器上创建一个别名,它将所有进入example.com/z/ 的流量引导到与example.com 的其余部分不同的目录,其中example.com 安装了Laravel 4.2,example.com/z/ 安装了运行服务的 Lumen 安装。

这是我原来的虚拟主机:

<VirtualHost *:80>
 ServerName example.com
 DocumentRoot /data/user/public_html/public
 <Directory /data/user/public_html/public>
  Options +FollowSymlinks
  AllowOverride All
 </Directory>
</VirtualHost>

这是添加了/z/ 别名的虚拟主机:

 <VirtualHost *:80>
  ServerName example.com
  DocumentRoot /data/user/public_html/public
  Alias /z/ /data/user/service/public
  <Directory /data/user/service/public>
   Options +FollowSymlinks
   AllowOverride All
  </Directory>
  <Directory /data/user/public_html/public>
   Options +FollowSymlinks
   AllowOverride All
  </Directory>
 </VirtualHost>

当导航到exmaple.com/z/ 时,我得到一个 403 页面并在日志中出现此错误:

 Directory index forbidden by Options directive: /data/user/service/public

如果我转到 /z/ 下的任何其他内容(例如:/z/abcd),我会得到一个 404 页面,但它看起来像 Laravel 404 页面而不是 Lumen 404 页面。

关于如何让这个工作的任何想法?

【问题讨论】:

  • 您是否更改了将别名置于其他虚拟主机之上的顺序?对这项工作不是 100% 有信心,但我会尝试。
  • 我查过了。不能这样工作:(

标签: php apache laravel lumen


【解决方案1】:

消息告诉你没有添加选项Indexes

<Directory /data/user/service/public>
   Options +FollowSymlinks +Indexes
   AllowOverride All
</Directory>

您的别名可能必须是

Alias /z /data/user/service/public

Alias /z/ /data/user/service/public/

【讨论】:

  • 当我添加这个时,我得到了目录列表(在我的例子中是 index.php 和 test.php)。尝试导航到这些文件中的任何一个都会导致 404 页面。
  • script '/data/user/service/publicindex.php' not found or unable to stat, referer: http://example.com/z/
  • 注意它正在合并它/.../publicindex.php,它应该是/data/user/service/public/index.php
  • 我认为这是问题所在并相应地进行了更改,既摆脱了目录列表,又使导航到test.php 工作。现在我遇到了example.com/z/ 的问题,它从看起来像 Lumen 的地方返回 404,但example.com/z/test(设置为仅返回“测试”的路线)在看起来是 Laravel 的地方是 404。关于现在发生了什么的想法?这与我最初遇到的行为类似,别名上没有斜杠。
  • 另外值得注意的是,我已经尝试了您发布的别名的两种变体(带有和不带有斜杠),结果相同。
【解决方案2】:

Options 指令禁止的目录索引:/data/user/service/public

Apache 没有找到 DirectoryIndex 指定的文件 - 默认为 index.php index.html 并且无法显示 indexes 按照你的配置 您确定/data/user/service/public 中存在这些文件之一吗?

确保这一点并将.htaccess 添加到您的公共目录中

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

来自http://lumen.laravel.com/docs/installation#pretty-urls

或将目录块添加到父级(如果有符号链接)

  <Directory /data/user>
        Options -Indexes FollowSymLinks
        AllowOverride all
        Order Allow,Deny
        Allow from all
    </Directory>

【讨论】:

    【解决方案3】:

    未经测试,但添加 Require all granted 应该会删除一些共享限制。

    要考虑的另一件事是确保您的文件夹实际上归 Apache 的所有者所有(www-data、apache 甚至您的用户名或其他内容,具体取决于您的安装)。如果 Apache 无法读取该文件夹,则会触发错误。

    我还将目录切换为引用别名而不是文件路径。

     <VirtualHost *:80>
      ServerName example.com
      DocumentRoot /data/user/public_html/public
      Alias /z /data/user/service/public
      <Directory /z>
       Options +FollowSymlinks +Indexes
       AllowOverride All
       Require all granted
      </Directory>
      <Directory /data/user/public_html/public>
       Options +FollowSymlinks
       AllowOverride All
      </Directory>
     </VirtualHost>
    

    【讨论】:

      猜你喜欢
      • 2016-09-21
      • 2015-06-26
      • 2015-06-21
      • 2017-06-22
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      相关资源
      最近更新 更多