Laravel项目部署Cpanel VPS出现No input file Specified错误求助
Hey there! Let's work through that frustrating "No input file specified" error you're seeing when deploying your Laravel project on a cPanel-powered VPS. I've debugged this exact issue dozens of times, so let's go through the most likely fixes step by step:
1. Verify Your Document Root Points to Laravel's public Folder
This is the #1 cause of this error. Laravel's entry point is public/index.php—if your virtual host points to the project root instead of the public directory, Apache can't find the right file to execute.
Update your VirtualHost configuration to set the DocumentRoot correctly:
<VirtualHost ipaddress:80> ServerName yourdomain.com ServerAlias www.yourdomain.com # Critical: Point to the public folder, not the project root DocumentRoot /var/www/html/public <Directory /var/www/html/public> AllowOverride All Require all granted </Directory> </VirtualHost>
After making this change, restart Apache to apply the settings:
systemctl restart httpd # For CentOS/RHEL # OR systemctl restart apache2 # For Ubuntu/Debian
If you're managing domains via cPanel's UI instead of editing config files manually, go to Addon Domains or Subdomains and set the document root to /public_html/yourproject/public (adjust the path to match your setup).
2. Fix File Permissions
Laravel needs write access to the storage and bootstrap/cache directories to function properly. Incorrect permissions will break the app and can trigger this error.
Run these commands to set the right permissions:
# Grant read/write/execute to the web server user chown -R www-data:www-data /var/www/html # OR if cPanel uses your username instead of www-data: # chown -R your_cpanel_username:your_cpanel_username /var/www/html # Set directory permissions chmod -R 755 storage bootstrap/cache
3. Ensure the public/.htaccess File Exists and Is Correct
The .htaccess file in the public folder handles URL rewriting for Laravel. If it's missing or misconfigured, requests won't route to index.php.
If the file isn't present, create it in /var/www/html/public with this content:
<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] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
Also make sure Apache's mod_rewrite module is enabled:
a2enmod rewrite # Ubuntu/Debian # OR httpd -t -D DUMP_MODULES | grep rewrite # Verify on CentOS/RHEL
Restart Apache after enabling the module.
4. Update .env Settings and Clear Cache
Incorrect APP_URL or cached config can cause routing issues. Open your .env file in /var/www/html and set the correct URL:
APP_URL=https://yourdomain.com
Then clear Laravel's cache to apply the change:
php artisan config:clear php artisan cache:clear php artisan route:clear
5. Check for SELinux Interference
If your server has SELinux enabled (common on CentOS/RHEL), it might block Apache from accessing Laravel's files. Test this by temporarily disabling SELinux:
setenforce 0
If the error goes away, set the correct SELinux context to fix it permanently:
chcon -R -t httpd_sys_rw_content_t /var/www/html/storage chcon -R -t httpd_sys_rw_content_t /var/www/html/bootstrap/cache
Quick Test to Narrow Down the Issue
Try accessing https://yourdomain.com/index.php directly. If this loads your Laravel app, the problem is with URL rewriting (check .htaccess or mod_rewrite). If it still throws the error, focus on document root or permissions.
内容的提问来源于stack exchange,提问作者Deepesh Thapa

