通过HTTP查看网站时,URL显示URL中的/index.php,但使用HTTPS时则不显示

时间:2017-08-04 01:50:38

标签: php laravel .htaccess http https

访问以下任意链接工作正常,网址中没有/index.php

1)https://kdev.solutions

2)https://www.kdev.solutions

但是,如果您尝试使用HTTP访问该站点,您将被重定向到HTTPS版本,但现在URL中将有/index.php。我怎么摆脱这个?

1)http://kdev.solutions

2)http://www.kdev.solutions

这是我的.htaccess文件:

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

    RewriteEngine On

    #get rid of index.php in home
    RedirectMatch 301 ^/index.php/(.*)$ https://kdev.solutions/$1

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

    # redirect to HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

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

2 个答案:

答案 0 :(得分:0)

删除这一行:

RedirectMatch 301 ^/index.php/(.*)$ https://kdev.solutions/$1

此配置足以将非https重定向到https(您已经拥有它):

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

答案 1 :(得分:0)

您需要通过在内部重写规则之前保留所有重定向规则来重新排序规则:

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

    RewriteEngine On

    # redirect to HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

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

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

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

另外,请确保清除浏览器缓存或在新浏览器中进行测试。