【问题标题】:Remove index.php From Sub directory websites URL从子目录网站 URL 中删除 index.php
【发布时间】:2015-09-06 22:20:44
【问题描述】:

我目前正在将大量子域网站移动为子目录网站。例如site1.website.com => website.com/site1。所有这些站点都在同一目录中使用相同的代码。该代码将读取站点名称并加载正确的数据库(如果存在)。所以我对所有网站都有以下别名格式。

Alias  /site1 /var/www/laravel/public 

无需过多解释,laravel 是一个 MVC 框架,index.php 是我唯一需要路由流量的文件。正因为如此,所有的 URLS 都需要以 index.php 作为前缀,但这真的很难看,我似乎无法摆脱它。

当网站是子域时,我尝试了以下方法,但现在不起作用。当我使用此代码 website.com/site1/login 将重定向到 website.com/login。

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

所有网站都是动态的,所以我不想为每个网站硬编码规则。有什么办法可以处理吗?

【问题讨论】:

  • 你能try this 吗?
  • 这种工作。 url 没有重定向到主网站,但它仍然给出 404 错误。在此服务器上找不到请求的 URL /site1/login。
  • 你有普通的routes.php 或者在里面处理一些动态的东西?
  • 只是普通的 routes.php。我唯一动态的是数据库连接。当它是一个子域时,其他一切都很好
  • 您的roothome 文件夹中有.htaccess 吗?

标签: php .htaccess laravel mod-rewrite


【解决方案1】:

为新文件夹设置一个 RewriteBase,如下所示:

RewriteEngine On
RewriteBase /site1/

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

【讨论】:

  • 太棒了!这行得通。你知道它是否可以动态地做到这一点?我有很多子域,我将来会添加更多,所以如果我不必每次都添加一个新的就好了。
  • 我之前误读了你的问题。我并没有真正使用为什么RewriteBase / 不起作用。 Laravel 肯定会为你处理目录吗?
  • 由于某种原因,当我设置 RewriteBase / 它只会显示主网站的主页。您上面的代码运行良好,只是需要编写大量手动代码,所以如果我可以动态设置基础,那就完美了。我对服务器有 root 访问权限,所以我可以在 apaches conf 文件中更改我需要的任何内容
  • 实际上这行得通!重写规则 ^ %{ENV:BASE}/index.php [L] 。我完全删除了 reqwritebase
【解决方案2】:

您可以为每个站点管理来自 laravel\config\database.php 的连接。

然后您可以设置所有子域将指向一个位置,现在您只需在添加新网站时更新更新 database.php

【讨论】:

  • 数据库不是它在 url 中的 index.php 的问题。数据库连接工作正常
猜你喜欢
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 2016-07-13
  • 2015-12-14
  • 2013-01-08
相关资源
最近更新 更多