我正在尝试在我的服务器上的此目录中安装laravel 5应用程序:
public_html/myapp/
我希望通过以下网址访问它:
http://www.example.com/myapp/
我已创建此.htaccess规则并将其放在myapp
文件夹中以重定向请求:
RewriteEngine on
RewriteRule ^(.*)$ public/$1 [L]
在我的浏览器中,当我尝试访问该应用时,我获得了重定向的网址,如:
http://www.example.com/myapp/public/index.php
http://www.example.com/myapp/public/index.php/dashboard
而不是漂亮的漂亮网址,如:
http://www.example.com/myapp/
http://www.example.com/myapp/dashboard
我需要在.htaccess文件中更改以获取正确的URL吗?
更新:如果需要,可以将laravel应用程序移动到其他位置,只要可以实现上面所需的URL结构(可以通过example.com/myapp/访问该应用程序)。
更新:当我尝试访问example.com/myapp/dashboard
时,我在浏览器中收到以下错误消息:NotFoundHttpException in compiled.php line 7793:
,其堆栈跟踪以:
in compiled.php line 7793
at RouteCollection->match(object(Request)) in compiled.php line 7066
at Router->findRoute(object(Request)) in compiled.php line 7038
at Router->dispatchToRoute(object(Request)) in compiled.php line 7030
at Router->dispatch(object(Request)) in compiled.php line 1989
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
更新:以下.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>
答案 0 :(得分:10)
您可以使用符号链接。
在public_html文件夹中创建应用程序公共文件夹的符号链接
cd / path / to / your / public_html
sudo ln -s / path / to / your / laravel_app / public myapp
您可以阅读有关符号链接here的更多信息。
答案 1 :(得分:4)
您可以通过在.htaccess
文件夹中添加其他myapp
文件轻松实现此目的(这会将myapp
文件夹中的所有请求重定向到public
,因为它应该):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
您还应修改.htaccess
目录中的myapp/public
,如下所示:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /myapp/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
</IfModule>
此处的更改是您重写基本路径RewriteBase /myapp/
答案 2 :(得分:0)
此示例适用于以下情况:
请按照以下步骤操作:
始终建议将公用文件夹与应用的其余部分分开。您可以通过在其中添加包含“拒绝所有”的.htaccess文件为Laravel文件夹添加一些保护。
答案 3 :(得分:0)
我遇到了同样的问题,但是使用 RewriteBase 参数可以修复它。
这是我的.htaccess:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteBase /my_app/
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>