Laravel 4控制器路由由于apache2配置而无法工作


Laravel 4 controller routes not working due to apache2 configuration

我正试图在家里的本地服务器上设置laravel,但我似乎无法使控制器路线正常工作例如:

Route::controller('home','home');

这段代码在我工作的服务器上运行,我读过一些关于声称该问题的问题是因为apache2没有配置为查看.htaccess文件。

我已经为此烦恼了一段时间,但我似乎仍然什么都做不到。我进入/etc/apache2/可用的站点,创建了我自己的配置文件site1看起来像这样:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/laravel/
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www/laravel/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

然后我运行了一个dissitedefault&amp;a2ensite site1和/etc/init.d/apache2重新启动但什么也没发生。

谢谢你的帮助,如果我需要澄清什么,请告诉我。

事实证明,apache甚至没有读取.htaccess文件。我故意写了一些废话本应导致错误,但事实并非如此。

问题是mod_rewrite.c没有启用,所以我进行了一次为期两个月的重写,一切都开始工作了。我注意到laravel中的.htaccess文件依赖于它。愚蠢的我。感谢所有帮助

在.htaccess中尝试替换此行:

RewriteRule ^ index.php [L]

带有

RewriteRule ^ /index.php [L]

编辑:

在这种情况下,我认为您的虚拟主机没有在httpd.conf中设置。你可以尝试一下,看看它是否有效:

将此行放入httpd.conf文件

对于windows

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName yourlaravel.com
    DocumentRoot "C:/wamp/www/laravel/public"
    <Directory "C:/wamp/www/laravel/public">
    </Directory>
</VirtualHost>
<VirtualHost *:80>
     ServerName localhost
     DocumentRoot "C:/wamp/www"
     <Directory "C:/wamp/www">
     </Directory>
</VirtualHost>

对于Linux

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName yourlaravel.com
    DocumentRoot "/var/www/laravel/public"
    <Directory "/var/www/laravel/public">
 </Directory>

<VirtualHost *:80>
   ServerName localhost
   DocumentRoot "/var/www"
   <Directory "/var/www">
   </Directory>
</VirtualHost>

并在本地机器中运行

对于打开窗口,C:''Windows''System32''drivers''etc''hosts会放此行。

 yourserverip   yourlaravel.com

对于linux,请打开''etc''hosts中的这一行。

 yourserverip   yourlaravel.com

您可以参考此链接了解更多信息:

http://net.tutsplus.com/tutorials/php/building-web-applications-from-scratch-with-laravel/

我希望这能有所帮助。

public/.htaccess不正确时,经常会出现这种错误。试试这个:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

如果要上传到AWS EC2,请使用默认的/var/www/html作为根目录:

[ec2-user@www html]$ pwd
/var/www/html
[ec2-user@www html]$ ll
-rw-r--r--  1 ec2-user ec2-user   146 Nov 10 06:29 CONTRIBUTING.md 
drwxr-xr-x 12 ec2-user ec2-user  4096 Mar  8 16:21 app 
-rwxr-xr-x  1 ec2-user ec2-user  2452 Nov 10 06:29 artisan  
drwxr-xr-x  2 ec2-user ec2-user  4096 Mar  5 00:18 bootstrap
-rw-r--r--  1 ec2-user ec2-user   717 Nov 10 06:29 composer.json  
-rw-r--r--  1 ec2-user ec2-user 58819 Jan 11 22:00 composer.lock 
drwxr-xr-x  3 ec2-user ec2-user  4096 Jan 11 22:24 nbproject  
-rw-r--r--  1 ec2-user ec2-user   567 Nov 10 06:29 phpunit.xml  
drwxr-xr-x  3 ec2-user ec2-user  4096 Nov 10 06:29 public    
-rw-r--r--  1 ec2-user ec2-user  2051 Nov 10 06:29 readme.md
-rw-r--r--  1 ec2-user ec2-user   519 Nov 10 06:29 server.php
drwxr-xr-x 20 ec2-user ec2-user  4096 Jan 11 22:00 vendor

保留ec2用户作为所有laravel文件的所有者。执行:

$ sudo chmod -R 777 app/storage  
$ sudo php artisan serve --host 0.0.0.0 --port 80  

https.conf:

<VirtualHost *:80> 
    ServerName localhost  
    DocumentRoot "/var/www/html/" 
    <Directory "/var/www/html/">  
        Options Indexes FollowSymLinks Includes execCGI  
        AllowOverride All
        Require all granted  
    </Directory> 
</VirtualHost>  

/var/www/html/.htaccess:

<IfModule mod_rewrite.c>  
    RewriteEngine On  
    RewriteRule ^(.*)$ public/$1 [L]  
</IfModule>