![](/img/trans.png)
[英]Installed Laravel 5 in subfolder with modified .htaccess but assets not showing
[英].htaccess for a Laravel app installed in a subfolder
我有一个域名,例如www.example.com
主站点位于FTP空间上,显示为/example.com
我在/example.com/laravel_app
下安装了(复制/粘贴,叹气... :()我的Laravel应用程序。
如果我使用完整的URL http://www.example.com/laravel_app/public/index.php
访问,则可以打开laravel应用,并且可以正常使用。
问题是,显然,我只想使用路径http://www.example.com/laravel_app
来访问它。
在laravel_app
的根目录中,我尝试粘贴此.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
在/example.com/laravel_app/public
我正在使用此`.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
RewriteBase /laravel_app/
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
因此,我的问题与应用程序的公用文件夹的.htaccess
无关,而与应用程序的根文件夹的.htaccess
有关。
我如何成功服务
http://www.example.com/laravel_app/public/index.php
访问
http://www.example.com/laravel_app
?
其实我让Laravel返回404
我尝试了这种变体(见过一些与此非常类似的问题)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ public/index.php/$1 [L]
</IfModule>
但是有了这个,我得到了Apache的禁止返回
我假设您已将应用程序安装在共享主机上,并且由于该应用程序正在运行Apache,因此该解决方案应该可以使用。
将您的.htaccess还原回原来的版本,并使用laravel进行部署。
理想情况下,您不应将项目上传到public_html中,因为它会将所有文件公开到网络上。
将除 public
以外的所有项目文件移动到public_html
下的目录。
例如。
/home/<username>
[laravel] <-- Make this directory
[public_ftp]
[public_html]
[ssl]
etc..
然后在你public_html
移动文件内的public
文件夹,你要为你的文件(你想要的地址去使用你的应用程序)的目录。
/home/<username>/public_html/laravel-app
[public_html]
[laravel-app]
-index.html
-robots.php
-.htaccess
-[css]
-[js]
-[svg]
etc..
现在,在laravel-app
文件夹中编辑index.html
文件,并同时更改两者:
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
..以反映您将yoru项目文件夹移动到的路径。
require __DIR__.'/../../laravel/vendor/autoload.php';
$app = require_once __DIR__.'/../../laravel/bootstrap/app.php';
本质上,在这种情况下../
意味着返回一个文件夹,因此目的是将其带回到找到laravel/vendor/
文件夹的位置,反之亦然。
实际上,这应该可以解决您的问题,并可以使您的.env和作曲者等人使用一个更安全的应用程序。在不干扰.htaccess的情况下,文件不会公开可用。
哦,这也是默认的.htaccess
代码,该代码应位于您的公用文件夹<project>/public
:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.