I have a major problem during the deployment of my laravel 5.6 project on shared hosting, It seems my blades are not going to work. I have copied all of my project files to a new folder in my root directory namely "muxproject" and then I coppied all of the files in public folder of laravel project to public_html, and i have changed the index.php file as follows
<?php
define('LARAVEL_START', microtime(true));
require __DIR__.'/../muxproject/vendor/autoload.php'; //changed
$app = require_once __DIR__.'/../muxproject/bootstrap/app.php'; //changed
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(
$request = Illuminate\Http\Request::capture()
);
$response->send();
$kernel->terminate($request, $response);
When I navigate to the link http://example.com/ A login page according to my logic in web.php appear and ask for the login after login successfully the user is redirected to the link http://example.com/home no issue still here but when I navigate to http://example.com/register nothing load except my header, footer, and sidebar my registration page does not appear. the same is the case with http://example.com/branch and http://example.com/userbranch
following is the code for my web.php file
<?php
Route::middleware(['auth'])->group(function (){
Route::get('/home', 'HomeController#index')->name('home');
Route::get('/branch','Branch\BranchController#index')->name('index');
Route::get('/userbranch','Branch\UserBranchController#index')->name('index');
Route::get('/course', 'Course\CourseMasterController#index')->name('index');
Route::get('/coursedetail','Course\CourseDetailController#index')->name('idex');
Route::get('/studentenquiry','Enquiry\StudentEnquiryController#index')->name('index');
});
Route::get('/', function () {
if(\Illuminate\Support\Facades\Auth::check())
return view('home');
return view('welcome');
});
Auth::routes();
Route::get('delete/{id}','Auth\RegisterController#destroy');
Route::patch('update','Auth\RegisterController#update')->name('update');
Route::patch('/update/branch','Branch\BranchController#update')->name('update');
Route::post('/storebranch','Branch\BranchController#store')->name('store');
Route::post('/storebranchuser', 'Branch\UserBranchController#store')->name('store');
Route::get('/delete/branch/{id}','Branch\BranchController#destroy');
Route::get('/userbranch/delete/{id}', 'Branch\UserBranchController#destroy');
Route::patch('/update/userbranch','Branch\UserBranchController#update')->name('update');
Route::post('/storecourse','Course\CourseMasterController#store')->name('store');
Route::get('delete/course/{id}','Course\CourseMasterController#destroy');
Route::patch('update/course', 'Course\CourseMasterController#update')->name('update');
Following is the code for RegisterUsersController to show the registration form
public function showRegistrationForm()
{
$userData = \App\User::all();
return view('auth.register',compact('userData'));
}
#section('content')
//
#endsection
the content between here in my blades register.blade.php, branch.blade.php and
userbranch.blade.php is not working and I am having just empty page except header, footer and sidebar just on shared hosting Each and everything works fine on local
Below is the code for .htaccess file
<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>
Please help me in this regard, I have gone through a lot of tutorials and I just figured out that for some reason the code in between #section('content') is not loading;
Why you have copied files and pasted in shared hosting and changed default files of laravel?
I think you should read this answer and understand and then deploy your project
You can do it in 2 ways
First way (recommended but time taking to learn):
1-You should learn how to use git (version control system). when you learn about it then you will be able to save your laravel project on a git server. while learning git you will read about clone it will let you download your project from git to any server, any computer. It can be difficult to understand at first but believe me it is very useful and you should use it. visit github.com , gitlab.com or bitbucket.com.
2- when you have learnt how to use git then save your code to git. Then use git bash (for windows) or use terminal for mac/linux these are command line tools. Using it you can connect to your server where you want host your site. login using ssh to shared hosting server and go to public_html and clone your laravel prpject there. After cloning,go to project direcrtory create .env file and change it according to your settings, then run composer install (it will install all packages that your project requires). Then set root directory of your laravel project to your domain using cpanel and hit domain. You should be able to see your laravel working
Second way:(NOT recommended but quick)
Copy project folder except vendor folder to shared hosting server
open your pc terminal, connect to server, go to laravel project directory, install laravel.
set domain to your laravel project root directory and hit domain
My site's directory structure is;
site -> app -> public
--> soundfiles (directory having sounds files)
route.php: Route::get("soundfiles", "controller#soundfiles");
when I hit mysite/soundfiles it shows me soudfiles directory instead of going to => controller#soundfiles.
I want it does not show sound files. where is the problem.
You should try:
Route::get("/soundfiles", "soundfilescontroller#soundfiles");
Route::get('/urlalias', 'controllerName#functionName');
OR
Add this to your htaccess file
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Your web server is serving the directory instead of routing everything through index.php. Work out whether you're using Nginx or Apache and ensure you've got it configured correctly. Laravel ships with a valid .htaccess file for Apache, read the docs for how to configure Nginx.
I have recently deployed a Laravel project to my live web server via FTP (Filezilla). Inside my young1.org web root folder I have the subdomain folder bookings, which displays web content at http://bookings.young1.org. Inside that folder I have the folder, 'laravel' that contains my entire laravel application, and inside that folder there is a 'public' directory.
I have imported my local database to one of the database accounts on the live web server via phpmyadmin, and I have switched the 'DB' credentials to point to the new database inside the env file in the laravel project root (changing the following variables: DB_DATABASE, DB_USERNAME, DB_PASSWORD).
When I navigate to http://bookings.young1.org/laravel/public, the home page of my application appears, fine and dandy. However, when I click on any of the internal links (e.g. the login and register) buttons, I just get a series of blank pages, and none of the internal pages appear.
Would anyone be able to take a guess at what the problem might be?
I have tried altering the .htaccess file to look like the below, and changing my 'PATHS' variable inside public/index.php.
Thanks,
Robert
London, UK
// public/.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteBase /
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
// public/index.php
require DIR.'/../laravel/bootstrap/autoload.php';
$app = require_once DIR.'/../laravel/bootstrap/app.php';
do you have SSH on the server? if yes did u install laravel as you're supposed to, also could you include the .env file contents, you can mask out the DB username and pass and the key you had to generate
never mind my mistake, i clicked on a link and got a SQL connection error (refused)
i still need to know if you installed laravel via SSH or that you just made the public folder the root, because if that's the case laravel cant help you with that (you need a VPS and not a webhost that only supports FTP as far as i know)
and to be sure
BE CAREFULL!!!
you have SQL connection errors that show credentials
Notice that your URLs work fine if you use index.php in them, i.e.:
http://bookings.young1.org/laravel/public/index.php/register
To allow URLs without index.php the mod_rewrite module on your Apache web server must be enabled.
First try to add this line in your .htaccess file of Laravel above RewriteEngine On:
Options +FollowSymLinks
This directive is needed to enable mod_rewrite in .htaccess context.
If it doesn't work after this, then you can check if module is enabled on your web server, the easiest maybe is to paste this in the beginning of index.php in public folder:
phpinfo();
Then open any page and search for mod_rewrite on the page, and see if you can find it under Loaded Modules. If not, you have to enable it.
To do that, if you can access through SSH you can do:
sudo a2enmod rewrite
sudo service apache2 restart
For more help on enabling mod_rewrite on Apache web server, check this answer.
I have a very legacy php application, that I'm trying to update to Symfony.
The application currently has a structure similar to this:
/www <-current web root
php_page1.php
php_page2.php
php_pagen.php
/dashboard
dashboard_page1.php
dashboard_page2.php
dashboard_pagen.php
The pages have helper files full of functions and the like, and there's also a few folders full of assets, but that's not really important. So to access a given page you'd point your browser to domain.com/php_page1.php or domain.com/dashboard/dashboard_page1.php... there's no front controller. All pages are accessed directly.
All in all, there's too much to refactor at once, so I want to do it in peices, one page at a time.
What I want to do is install symfony on top of what I have now, so the symfony structure will co-exist with what's currently here:
/www <-legacy
php_page1.php <-legacy
php_page2.php <-legacy
php_pagen.php <-legacy
/app <-symfony
/dashboard <-legacy
dashboard_page1.php <-legacy
dashboard_page2.php <-legacy
dashboard_pagen.php <-legacy
/src <-symfony
/web <-symfony (new web root)
.htaccess <-symfony (points to app.php)
app.php <-symfony (front controller)
I've successfully installed Symfony and migrated a sample legacy page over (Please note the web root moved). This works great.
The trouble is, ultimately, I need Apache to serve the legacy pages if they exist, and go through front controller (app.php) if they do not.
Here's what I've tried.
I've tried various .htaccess rules to try and make Apache serve files in /www and /www/dashboard. These fail, with Symfony telling me there's no route to match to.
I've also tried Symfony's $this->redirect('..\www\php_page1.php');. This fails with Symfony telling me "Looks like you tried to load a template outside of configured directories."
Finally I tried to add /dashboard as a route:
/**
* #Route("/cvdashboard/{file}")
*/
public function cvdashboardAction($file) {
return $this->render("#dashboard/$file");
}
And added a twig path:
twig:
...
paths:
'%%kernel.root_dir%/../dashboard':dashboard
This yealds three exceptions:
FileLoaderLoadException in FileLoader.php line 118:
InvalidArgumentException in YamlFileLoader.php line 371:
ParseException in Inline.php line 108:
Question
So my question is:
How can I configure Symfony / Apache such that if a url that currently exists is called (i.e. domain.com/php_page1.php) it will serve that page either through Symfony or Apache directly and if it does not exist, have Symfony's front controller handle the request?
EDIT
Here's the .htaccess I currently have:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . app_dev.php [L]
This works for Symfony and routes anything I have a defined route for. The problem is that it's in /www/web (new web root), which is where Symfony wants the web root to be. It won't access anything in /www or /www/dashboard, which is outside the web root.
I'm trying to use .htaccess to either cause Apache to grab files from one level down from the web root, or cause Symfony to serve those pages as the generic php scripts they are.
You can use mod_rewrite for that:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d # not an existing dir
RewriteCond %{REQUEST_FILENAME} !-f # not an existing file
# redirect to the symfony app.php file
RewriteRule ^(.*)$ www/app.php [L]
So, I'm running xampp on Windows. I'm currently trying to get familiar with the laravel framework. Now, when thats pointed out. How can i be able to access my laravel application/website direct within the root?
Example,
What I'm doing now is: localhost/laravel/public/about (to see the
about page)
What i want to do is: localhost/laravel/about
Any good solutions for this? do i need to add a .htacess file on the root folder of laravel? (not the public one).
Any suggestions?
Easiest way is create .htaccess file in your Laravel root with following content:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
It should be redirected easily.
Reference: https://coderwall.com/p/erbaig/laravel-s-htaccess-to-remove-public-from-url
Here's how I did it.
Edit your Windows Host file - C:\Windows\System32\drivers\etc\hosts
Edit the Apache vhosts file - Drive-Letter:\xampp\apache\conf\extra\httpd-vhosts.conf
Add an htaccess file to the laravel/public folder (if its not already there)
Restart Xampp apache server
Windows can be a real PITA when trying to edit the Hosts file because of the User Account Control. Since I work on all kinds of small hobby projects, I have to edit this file all the time so this is what I do.
Install PSPad. It loads really fast and you can bookmark files for easy loading/editing. Sublime Text also works well if you load the two files I mentioned above and save the workspace as a new project.
Right-click on the PSPad (or other editor) program shortcut and choose 'Run as Administrator'. You cannot save changes to the Hosts file unless you do this.
Open the Windows Host file in the editor. This file does not have a file extension, so you have to choose "All Files" in the File Open dialog to even see the file.
At the bottom of the file, add this:
127.0.0.1 laravel.dev
This tells Windows to point the web browser to localhost whenever you enter laravel.dev in the browser's address bar.
Save the file.
Open the xampp Apache httpd-vhosts.conf file.
At the bottom of the file, add this: (I am assuming xampp is installed at the root of the D: drive)
<VirtualHost *:80>
ServerName laravel.dev
DocumentRoot "D:/xampp/htdocs/laravel/public"
<Directory "D:/xampp/htdocs/laravel/public">
</Directory>
</VirtualHost>
Add an htaccess file to your laravel/public folder (if its not already there).
I think the default htaccess file that comes with L4 looks like this:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
Restart your xampp apache server.
Open a web browser and type in the address bar - http://laravel.dev
That will take you to the index.php file in the "public" folder.
To get to the About page, I think the address would be http://laravel.dev/about
Move the contents of the /public folder down a level.
You'll need to update the include lines in index.php to point to the correct location. (if it's down a level, remove the '../').
BEST Approch: I will not recommend removing public, instead on local computer create a virtual host point to public directory and on remote hosting change public to public_html and point your domain to this directory. Reason, your whole laravel code will be secure because its one level down to your public directory :)
METHOD 1:
I just rename server.php to index.php and it works
METHOD 2:
Here is my Directory Structure,
/laravel/
... app
... bootstrap
... public
... etc
Follow these easy steps
move all files from public directory to root /laravel/
now, no need of public directory, so optionally you can remove it now
now open index.php and make following replacements
require DIR.'/../bootstrap/autoload.php';
to
require DIR.'/bootstrap/autoload.php';
and
$app = require_once DIR.'/../bootstrap/start.php';
to
$app = require_once DIR.'/bootstrap/start.php';
now open bootstrap/paths.php and change public directory path:
'public' => DIR.'/../public',
to
'public' => DIR.'/..',
and that's it, now try http:// localhost/laravel/
Set you document root for apache to the public folder, and not the laravel folder. This is the simplest technique and recommended for production environments.
I'm using L5, This works for me fine:
Rename the server.php in the your Laravel root folder to index.php
copy the .htaccess file from /public directory to your Laravel root folder.
-- Thatz it!!!
I've been struggling with this problem too but i've found a simple solution that only requires you to create another .htaccess at the root of your application.
The .htaccess itself should contain this:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^{yoursite}.{extension} [NC]
RewriteRule (.*) http://www.{yoursite}.{extension}/$1 [R=301,L]
RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) /public/$1 [L]
The complete system keeps working but it redirects to the /public folder.
This is how I solved the problem for myself.
Hope it helps!
Cheers.
Add following code to htaccess file. It may helps you.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Add following code in your .htaccess (if not exist create a .htaccess on laravel root directory)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Source : http://tutsnare.com/remove-public-from-url-laravel/
at Source you also get another method to do same.
Update : Preferred way to do it is make change in directory structure which explain in source URL.
just in simple step i did in laravel 5
make .htaccess like this in laravel 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>
then rename your server.php to index.php
that it it will work
or if you just doing local development
run this comman php artisan serve
it will start local server at localhost:8000 (port may vary)
You can use symlinks or edit the httpd.conf file.
Check my answer to another similar question. I hope that it helps.
If you don't wish to go through the stress of configuring .htaccess file,
you could use PHP Built-in Server by doing this:
From your command utility, cd into laravel\public
The run: php -S localhost:8000
After you can access your website by going to:
http:://localhost:8000
works without appending public
See the official manual to learn more:
http://php.net/manual/en/features.commandline.webserver.php
Go to project folder using cmd and type "php artisan serve".
Now navigate to: localhost:8000
I have found geart flow to work with laravel localy.
What you can do is to configure xampp a bit. At your xamp's httpd.conf file you have to find document DocumentRoot and <Directory>. Change root directory to yours laravel public folder and restart apache. Since when you can access your project simplly just typing localhost. Now if you want you can change your host file and rewrite local dns, for example: 127.0.0.1 example.laravel.com and now you can access your project with real url. It may look bit complicated, but it's not.
Alternative to that would be php artisan serve. You can start server on different ports and when re-write hosts file.
You could add some features to improve your workflow even more, for example vagrant or ngrok. You can share your project for live presentation (speed may be issue here).
Need to remove public segment in the larvel4 app
Laravel 4 requires you to put your app code one level higher than the web root, and this causes problems for some developers that are stuck on shared hosting and that doesn’t allow a setup like this. It’s actually really easy to get around it. I read that some L4 specific packages could have problems on a setup like this, but I didn’t experience anything like that with any package yet.
So first install L4 somewhere you like. I liked the article Niall wrote on keeping the base L4 app up to date, so go and check that out: Installing and Updating Laravel 4
I find it’s enough for this example to simply clone the repo (assuming you have composer installed globally, if not, go to http://getcomposer.org/):
git clone -b develop git://github.com/laravel/laravel.git app_name
php composer install
Note that we are cloning the develop branch since L4 is still in beta at this time.
So to remove the “public” part from your URL, simply move all files and folders from public to your app root and you’ll end up with a folder structure like this:
/app
/bootstrap
/packages (copied from /public)
/vendor
.htaccess (copied from /public)
artisan
composer.json
favicon.ico (copied from /public)
index.php (copied from /public)
robots.txt (copied from /public)
server.php
Now we need to edit our paths in index.php:
require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/start.php';
And then just set the public dir in out /bootstrap/paths.php file:
'public' => __DIR__.'/..',
this is my suggession
You need to do following things:
first copy all the contents of the public directory in your root directory i.e. bring the contents of public folder 1 step up.
modify the contents of index.php
From =>
require __DIR__ . "/../bootstrap/autoload";
$app = require_once __DIR__ . "/../boostrap/start.php"
To =>
"require __DIR__.'/bootstrap/autoload.php';"
"$app = require_once __DIR__.'/bootstrap/start.php';
and also contents of bootstrap/paths.php
From => 'public' => __DIR__.'/../../',
To => 'public' => __DIR__.'/..',
3.Then finally create .htaccess file in your root directory and write this.
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Simple Steps To follow:
Rename server.php (In Root directory) to index.php
Copy .htaccess file from public directory to root directory
rename the server.php to index.php and copy .htaccess from /public is the right way.
If you send your app online,just change DocumentRoot to the path of public.
if you remove public from url first of all move index.php and .htaccess file from public folder to root of the laravel and change in index.php file
require DIR.'/../bootstrap/autoload.php';
$app = require_once DIR.'/../bootstrap/start.php';
to
require DIR.'/bootstrap/autoload.php';
$app = require_once DIR.'/bootstrap/start.php';
and run the program
This has been asked before many times. I had the same problem. I solved it by using vhosts and .htaccess files. I wanted to write about solution on both XAMPP on Windows and LAMP installation on Ubuntu. My configuration on windows:
My aim was to reach my application by entering the uri below
http://localhost/subdir
c:\xampp\htdocs\subdir\ # this was laravel root directory
c:\xampp\apache\conf\extra\httpd-vhosts.conf # this virtual hosts file
I used original .htaccess file from Laravel website (and remember .htaccess file must be in public directory) but I just added one line which is
RewriteBase /subdir (just below RewriteEngine On)
In addition, in httpd-vhosts file you should add your subdirectory alias like that:
Alias /subdir
"C:/xampp/htdocs/subdir/public"
<Directory "C:/xampp/htdocs/subdir/public">
Order allow,deny
Allow from all
Options All
AllowOverride All
Require all granted
</Directory>
Hope everything is clear with my explanation. This answer can be applied on unix based systems easily.