我想我的服务器上此目录中安装一个laravel 5应用程序:
public_html/myapp/
我希望它在这个网址访问:
http://www.example.com/myapp/
我创造了这个规则的.htaccess并将其放置在myapp
文件夹,以便将请求重定向:
RewriteEngine on
RewriteRule ^(.*)$ public/$1 [L]
在我的浏览器,当我尝试访问该应用程序我重定向的URL,如:
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应用程序可以在其他地方,如果需要被移动,只要上述(与example.com/myapp/访问的应用)所需的URL结构可以实现的。
更新:当我尝试访问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>
你可以做的是使用一个符号链接。
你可以阅读更多关于符号链接here。
您可以轻松地在.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/
我也有同样的问题,但与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>
这个例子应该下列情况下工作:
跟着这些步骤:
它总是建议公用文件夹从您的应用程序的其余部分分开。您可以通过添加在他们里面.htaccess文件将包含“所有拒绝”加了一些保护Laravel文件夹。