Install Laravel 5 app in subdirectory with htaccess
Solution 1
What you can do is use a symlink.
- Place your laravel app somewhere else (outside the public_html folder)
-
Create a symlink of your app's public folder inside the public_html folder
cd /path/to/your/public_html
sudo ln -s /path/to/your/laravel_app/public myapp
You can read more about symlinks here.
Solution 2
You can easily achieve this by adding additional .htaccess
file in the myapp
folder (this will redirect all of your requests in myapp
folder to the public
as it should):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
You should also modify the .htaccess
in your myapp/public
directory, like this:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /myapp/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
</IfModule>
The change here is that you rewrite the base path RewriteBase /myapp/
Solution 3
I was having the same issue, but with the RewriteBase parameter it was possible to fix it.
This is my .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>
Ben Cole
Updated on July 09, 2022Comments
-
Ben Cole almost 2 years
The Setup
I am trying to install a laravel 5 app in this directory on my server:
public_html/myapp/
And I want it to be accessed at this URL:
http://www.example.com/myapp/
I have created this .htaccess rule and placed it in the
myapp
folder in order to redirect requests :RewriteEngine on RewriteRule ^(.*)$ public/$1 [L]
Problem:
In my browser when I try to access the app I get redirected URLs like:
http://www.example.com/myapp/public/index.php
http://www.example.com/myapp/public/index.php/dashboard
instead of nice pretty URLs like:
http://www.example.com/myapp/
http://www.example.com/myapp/dashboard
What do I need to change in my .htaccess file to get proper URLs working?
Update: The laravel app can be moved elsewhere if needed, as long as the desired URL structure above (with the app accessible at example.com/myapp/) can be achieved.
Update: When I try to access
example.com/myapp/dashboard
I receive the following error message in the browser:NotFoundHttpException in compiled.php line 7793:
with a stack trace that starts with: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))
Update: The following .htaccess file is located in the public folder:
<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>