子域路由不适用于Laravel 5 - WAMPServer

时间:2015-06-05 12:55:05

标签: apache .htaccess laravel routing wamp

我正在尝试在我的应用程序中实现静态和动态子域路由。它没有按预期工作。我在本地机器上使用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                                      |            |
+------------------+----------+----------+------+----------------------------------------------+------------+

主机文件有此

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

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

2 个答案:

答案 0 :(得分:8)

检查:icannwiki

.dev是新提议的gTLD之一。我们过去常常在内部使用.dev域名,但之后转移到.local以避免问题。

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

一般情况下,您应该避免在主机文件中使用相同IP地址的多行,只需将它们添加到同一行,用空格分隔:

127.0.0.1 localhost letsplay.dev api.letsplay.dev

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

即可
ServerAlias *.letsplay.dev
在你的vhost配置中。

答案 1 :(得分: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