我在laravel开发了一个网站,但问题是如果有人知道他可以直接访问我不想要的网站文件的文件名称
JobScholar
app
Exceptions
Http
Mail
Models
Permission.php
Providers -
Role.php
User.php
.env
etc etc
应用程序工作正常,但如果用户输入
,我想要的是什么http://localhost:8080/JobScholar/app/
or
http://localhost:8080/JobScholar/User.php/
他应该重定向到家庭控制器或看到错误消息
我的.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
Options -Indexes
ErrorDocument 403 http://localhost:8080/JobScholar/index
Options +FollowSymLinks
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /JobScholar/$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
## Don't listing directory
#Options -Indexes
#
## Follow symbolic links
#
#
## Default handler
#DirectoryIndex index.php
我不希望用户访问任何文件或directory
他唯一可以看到的目录和文件只是那些routes
定义的文件
答案 0 :(得分:0)
Laravel基本流程是所有请求都通过index.php
文件夹中的public
文件。因此,您必须确保您的服务器将所有请求指向该文件夹,以便index.php
可以提供服务并处理剩下的工作。
快速修复是创建vHost文件(假设您不在共享主机上)。 这是一个样本:
<VirtualHost *:80>
ServerName www.site.com
ServerAlias site.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/site_name/public
<Directory /var/www/html/site_name/public>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
在apache服务器上,它将进入:
/etc/apache2/sites-available/
然后启用网站a2ensite site_name.conf
最后将您的网站指向/etc/hosts
中的服务器IP,如下所示:127.0.0.45 site.com
还要确保使用a2enmod rewrite
启用mod重写,以便Laravel提供的.htaccess
可以对URL进行必要的重写。
最后重启apache:service apache2 restart