子域路由在 Laravel 5 上不起作用 - WAMPServer
Posted
技术标签:
【中文标题】子域路由在 Laravel 5 上不起作用 - WAMPServer【英文标题】:Subdomain routing not working on 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
帮助我了解我错过了什么!
【问题讨论】:
【参考方案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_module
和 vhost_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。以上是关于子域路由在 Laravel 5 上不起作用 - WAMPServer的主要内容,如果未能解决你的问题,请参考以下文章
我的一些 Laravel 路由(PUT 和 DELETE)在共享主机上不起作用