3

我正在尝试在家里的本地服务器上设置 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 default && a2ensite site1 和 /etc/init.d/apache2 restart 但什么也没发生。

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

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

4

4 回答 4

5

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

于 2013-06-27T01:12:37.063 回答
3

在 .htaccess 中尝试替换这一行:

RewriteRule ^ index.php [L]

RewriteRule ^ /index.php [L]

编辑:

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

将此行放在 httpd.conf 文件中

对于窗户

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/

我希望这能有所帮助。

于 2013-06-24T08:24:21.727 回答
0

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

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
于 2013-06-23T21:22:49.063 回答
-1

如果您要上传到 AWS EC2,请使用 default/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> 
于 2015-03-08T10:08:12.043 回答