正在使用laravel进行开发,项目中的静态资源目录与路由会出现同名,比如:
//web的静态资源路径
/public/web/xxx
//定义的路由
Route::group(['prefix' => 'web'], function () {
Route::get('/', 'XxxController@indexPage');
});
如果这样配置的话,在开发环境使用php内置服务器访问 localhost:8000/web 会出现404错误:
The requested resource /web_dealer was not found on this server.
研究了一下,应该是因为public目录下有同名的资源路径,所以服务器没走路由,直接当静态资源进行处理。但实际上这个web只是一个文件夹,所以才会出现上面的404。
使用apche服务器进行测试,apache似乎会把localhost:8000/web重定向(301)到localhost:8000/web/,页面上会暴露目录结构。设置options -Indexes来只是禁止展现,依旧会对localhost:8000/web进行重定向。
想知道,如果想将静态资源路径和路由命名如上所示进行统一,应该怎么去配置。或者说有没有其他更好的命名方案。
仅有的幸福2017-05-16 16:52:56
可以通过修改public/.htaccess来实现(Linux Mint下LAMP本地测试通过)
步骤
修改public目录下的.htaccess文件
定位到:
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
原本意思是:如果不是目录!-d、也不是文件!-f,那么解析到index.php
修改为
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
现在表示:如果不是文件!-f,那么解析到index.php
(从某种意义上!-d已经没用了)
本地测试通过,是否会带来其他问题暂时未知。