Laravel auth不工作将mysite.com/index.php改为mysite.com

时间:2017-10-15 11:12:29

标签: php apache laravel .htaccess authentication

我设置了一个用于开发的本地Laravel服务器,并通过Git将更改推送到我的生产服务器。

我制作了一个新的Laravel项目,我很好。然后我在我的本地服务器上添加了php artisan make:auth并推送到生产但得到404无法找到登录(或注册)。经过一些工作,我发现: www.mySite.com/login 无法找到,但如果我写 www.mySite.com/index.php/login它的工作原理。

所以现在我想我必须修改我的htaccess来忽略index.php,但是我无法让它工作。我尝试了一些建议,但似乎没有任何建议,我不知道为什么它不起作用。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On
    RewriteBase Test/public/

*    RewriteCond %{THE_REQUEST} /index\.php [NC]           
*    RewriteRule ^(.*?)index\.php$ /$1 [L,R=302, NC, NE]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

标有*的两行我试图在Stack Overflow上阅读建议后添加(无法找到链接)。我也试过了 htaccess remove index.php from url 这个建议。

有什么想法吗?谢谢。 编辑: 我的网站启用/ 000-default.conf如下所示:

<VirtualHost *:80>


        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/Test/public

        <Directory /var/www/html/Test/public>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Require all granted
        </Directory>


        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

RewriteEngine on
RewriteCond %{SERVER_NAME} =nfoscan.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

和我的000-default-le-ssl.conf看起来像这样:

<IfModule mod_ssl.c>
<VirtualHost *:443>
        # The ServerName directive sets the request scheme, hostname and port that


        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/Test/public



        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLCertificateFile /etc/letsencrypt/live/mysite.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
ServerName mysite.com
</VirtualHost>
</IfModule>

我删除了配置中的评论..

我尝试添加

<Directory /var/www/html/Test/public>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Require all granted
        </Directory>

到我的000-default-le-ssl.conf但导致内部服务器错误..

2 个答案:

答案 0 :(得分:1)

首先检查你的apache是​​否启用了mod_rewrite,你可以轻松地做到 打字

apache2 -M

甚至更简单:

a2enmod rewrite

如果您已经启用它,您将收到消息: &#34;模块重写已启用&#34;

如果您还没有,那么您将收到消息: &#34;启用模块重写&#34;。你将不得不重启apache。

检查你是否有htaccess行(AllowOverride All)

<Directory /var/www/html/project/>
  Options FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
</Directory>

答案 1 :(得分:0)

好的,我修好了。我的.htaccess文件中存在一些问题。我开始删除/ Test / public中的.htaccess文件,然后我再次搞乱000-Default-le-ssl.conf文件时没有得到内部服务器错误。然后我只是复制了目录中的另一个.htaccess文件,它完全按原样运行:O

感谢所有试图帮助我的人!

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # 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]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

如果有人再次遇到此问题,则发布工作.htaccess文件:)