【问题标题】:Subdomain routing not working on Laravel 5 - WAMPServer子域路由在 Laravel 5 上不起作用 - WAMPServer
【发布时间】:2015-08-20 10:30:28
【问题描述】:

我正在尝试在我的应用程序中实现静态和动态子域路由。它没有按预期工作。我在本地机器上使用 WAMPServer。

routes.php

Route::get('/', 'WelcomeController@index');

Route::group(['domain' => 'api.letsplay.dev'], function () {

    Route::group(['prefix' => 'v1'], function () {
        Route::get('users', function () {
            return "Success";
        });
    });

});

php artisan route:list 给出了这个

+------------------+----------+----------+------+----------------------------------------------+------------+
| Domain           | Method   | URI      | Name | Action                                       | Middleware |
+------------------+----------+----------+------+----------------------------------------------+------------+
|                  | GET|HEAD | /        |      | App\Http\Controllers\WelcomeController@index | guest      |
| api.letsplay.dev | GET|HEAD | v1/users |      | Closure                                      |            |
+------------------+----------+----------+------+----------------------------------------------+------------+

hosts 文件有这个

127.0.0.1       localhost
127.0.0.1       hosp.dev
127.0.0.1       letsplay.dev

我使用的是laravel框架提供的.htaccess文件,没有做任何改动

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin webmaster@letsplay.dev
    DocumentRoot "c:/wamp/www/letsplay-web/public"
    ServerName letsplay.dev
    ErrorLog "logs/letsplay.dev-error.log"
    CustomLog "logs/letsplay.dev-access.log" common
</VirtualHost>

当我尝试从浏览器中点击 letsplay.dev 时,它按预期工作。但是在尝试点击 api.letsplay.dev/v1/users 时,我在 Chrome 中得到了 ERR_ICANN_NAME_COLLISION,并从 IE 中得到了以下错误!

Forbidden error from IE

帮助我了解我错过了什么!

【问题讨论】:

    标签: apache .htaccess laravel routing wamp


    【解决方案1】:

    检查:icannwiki

    .dev 是新提议的 gTLD 之一。我们曾经在内部使用 .dev 域,但为了避免出现问题,我们移到了 .local。

    此外,正如 chanafdo 在他的 cmets 中提到的,您不能在 Windows 主机文件中使用通配符。因此,您还必须指定每个子域。

    而且你通常应该避免在你的主机文件中有多个具有相同 IP 地址的行,只需将它们添加到同一行,用空格分隔:

    127.0.0.1 localhost letsplay.dev api.letsplay.dev
    

    要在 apache 中启用通配符子域支持,只需指定

    ServerAlias *.letsplay.dev
    

    在您的虚拟主机配置中。

    【讨论】:

      【解决方案2】:

      首先启用 Apache 模块 alias_modulevhost_alias_module

      然后在您的httpd-vhosts.conf 文件中添加以下内容。

      <VirtualHost *:80>
          ServerName letsplay.dev
          ServerAlias api.letsplay.dev
          DocumentRoot "c:/wamp/www/letsplay-web/public"
          <directory "c:/wamp/www/letsplay-web/public">
              Options Indexes FollowSymLinks
              AllowOverride all
              Order Deny,Allow
              Deny from all
              Allow from all
          </directory>
      </VirtualHost>
      

      重启 WampServer。

      然后在您的hosts 文件中添加以下内容。

      127.0.0.1 api.letsplay.dev
      

      【讨论】:

      • 动态子域路由怎么做?
      • 如果您看到 ie 错误屏幕截图,很明显请求正在到达本地 wamp 服务器。它在 chrome 中有所不同。
      • 动态是什么意思。您是否需要做类似域文件夹映射的事情。
      • 请注意 windows 不允许在 hosts 文件中使用通配符。见this question
      猜你喜欢
      • 2015-09-10
      • 2015-10-01
      • 1970-01-01
      • 2022-08-12
      • 2015-10-27
      • 2015-08-09
      • 2015-06-10
      • 1970-01-01
      • 2015-03-27
      相关资源
      最近更新 更多