2017-12-30 11 views
1

Bevor ich MVC nutze, benutze ich einfach diese Zeile, um die URL auf https zu setzen. Also, wenn der Benutzer in www.example.com getippt es sie https://example.comWie stelle ich die Website auf HTTPS-Version mit MVC

RewriteRule (.*) https://example.com/$1 [R] 

Allerdings nehmen würde, wenn dies mit meiner MVC Website zu tun versucht, die Eingabe in www.example.com nimmt mich auf diese URL und leitet nicht zu https um. Ich muss https://mexample.com manuell eingeben, um zur https-Version zu gehen. Wie kann ich das beheben?

In meiner Wurzel, meine .htaccess wie folgt aussieht:

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteRule ^$ public/ [L] 
RewriteRule (.*) public/$1 [L] 
RewriteRule (.*) https://example.com/$1 [R] 
</IfModule> 

Dann in meinem öffentlichen Ordner meine .htaccess wie folgt aussehen:

<IfModule mod_rewrite.c> 
Options -Multiviews 
RewriteEngine On 
RewriteBase /public 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] 
</IfModule> 

Antwort

1

ich in der Regel tun dies in .htaccess vermeiden, wie Ich mag Die Flexibilität einer Einstellung innerhalb der Anwendung zu erzwingen oder nicht, plus ich Reverse-Proxy-und Cloudflare, so würde dies dazu zwingen mich, End2end-Zertifikate zwischen App-Servern einrichten und sperrt mich in die Verwendung von Apache2 anstelle von Nginx oder Caddyserver.

Also ich tue es einfach in PHP in den Basis-Controller, zum Beispiel:

// is https 
$https = false; 
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') { 
    $https = true; 
} 
elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') { 
    $https = true; 
} 

// is not https but required as https in config 
if (!$https && $this->f3->get('app.security.force_https') === true) { 
    exit(header('Location: '.$this->f3->get('site.url'), 302)); 
} 

Wenn Sie es in .htaccess, so etwas wie zu tun:

# ---------------------------------------------------------------------- 
# | Forcing `https://`             | 
# ---------------------------------------------------------------------- 

# Redirect from the `http://` to the `https://` version of the URL. 
# https://wiki.apache.org/httpd/RewriteHTTPToHTTPS 

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTPS} !=on 
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 
</IfModule> 
+0

Awesome, thanks! – user8463989

Verwandte Themen