由于apache2配置,Laravel 4控制器路由无法正常工作

时间:2013-06-23 17:37:52

标签: php apache apache2 laravel laravel-4

我正在尝试在家里的本地服务器上设置laravel,我似乎无法 得到控制器路线,例如:

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

这段代码可以在我工作的服务器上运行,并且我已经阅读了一些关于这个的论坛 声称问题的问题是因为apache2未配置为查看 .htaccess文件。

我已经搞砸了一段时间,但我似乎仍无法得到任何工作。 我进入/ etc / apache2 / sites-available并创建了我自己的配置文件,名为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>

然后我运行了a2dissite默认&amp;&amp; a2ensite site1和/etc/init.d/apache2 restart 但什么都没发生。

感谢您的帮助,如果我需要澄清任何内容,请告诉我。

原来apache甚至没有读取.htaccess文件。我特意写了一些废话 在它应该导致错误,但它没有。

4 个答案:

答案 0 :(得分:5)

问题原来是mod_rewrite.c没有启用, 所以我运行a2enmod重写,一切都开始工作了。我注意到了 laravel中的.htaccess文件依赖于它。傻我。谢谢你们 帮助

答案 1 :(得分:3)

在.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/

我希望这可以提供一些帮助。

答案 2 :(得分:0)

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

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

答案 3 :(得分:-1)

如果您要上传到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-user保留为所有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>