J'ai des .htaccess
paramètres pour envoyer toute demande non-www à www.
Cela fonctionne pour la page d'accueil, mais lorsque je vérifie d'autres URL, cela va à la page d'accueil.
Voici mes paramètres ( MISE À JOUR ): La partie supérieure vient de laravel
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# 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]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
#First rewrite any request to the wrong domain to use the correct one (here www.)
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
RewriteRule .* ? [F,L]
</IfModule>
Par exemple
https://example.com
va à https://www.example.com
.
Mais https://example.com/contact
ne va pas https://www.example.com/contact
. Au lieu de cela, il va à https://www.example.com
.
Quel peut être le problème et la solution?
mais
https://example.com/contact
ne va pas àhttps://www.example.com/contact
En supposant que vous n'utilisez pas simplement des URL sans extension (c'est-à-dire des mappages /contact
vers /contact.php
) avec MultiViews / mod_negotiation, vous devez avoir d'autres directives mod_rewrite qui acheminent ces requêtes.
Il semble que vous ayez mis ces directives dans le mauvais ordre.
Les redirections externes dans votre question doivent aller vers le haut de votre .htaccess
avant toute réécriture interne sur un contrôleur frontal.
De côté:
#First rewrite any request to the wrong domain to use the correct one (here www.) RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
Cette règle devrait rediriger vers https://
, non http://
. Sinon, vous obtiendrez plusieurs redirections inutiles (https vers http et retour vers https).
RewriteCond %{HTTP_USER_AGENT} libwww-perl.* RewriteRule .* ? [F,L]
Cette règle (actuellement la dernière), doit aller au sommet. En règle générale, toutes les directives de blocage doivent être les premières. Vous pouvez également simplifier / optimiser cela un peu ...
RewriteCond %{HTTP_USER_AGENT} libwww-perl
RewriteRule ^ - [F]
L
est implicite lors de l'utilisation F
. S'il n'y a pas de chaîne de substitution, vous devez utiliser -
, non ?
.
MISE À JOUR: Suite à votre question mise à jour, ma réponse / hypothèse initiale est confirmée ... vos directives sont dans le mauvais ordre. Vos redirections externes doivent passer avant le contrôleur frontal Laravel.
Sinon, dans son ordre actuel, une demande du formulaire example.com/contact
est d'abord réécrite en interne index.php
par le contrôleur frontal Laravel, puis il y aura une redirection externe vers le schéma canonique + nom d'hôte, le résultat net est que vous êtes redirigé vers la page d'accueil.
La redirection cPanel que vous avez mentionnée dans les commentaires se manifeste simplement comme une règle dans .htaccess
(que vous avez déjà incluse). Mais notez que toutes les redirections cPanel sont placées (souvent de manière incorrecte) à la fin du .htaccess
fichier (ceci est indiqué dans la documentation de cPanel ).
Donc, en résumé, vos directives devraient être écrites comme ceci:
Options -MultiViews -Indexes
RewriteEngine on
#
# BLOCKING DIRECTIVES
#
# Block certain requests
RewriteCond %{HTTP_USER_AGENT} libwww-perl
RewriteRule ^ - [F]
#
# CANONICAL REDIRECTS
#
# Redirect non-www to www + HTTPS
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=301]
# Redirect HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Remove index.php
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
#
# Laravel directives follow...
#
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# 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]
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots