2017-05-01 3 views
1

Actuellement, je redirige tout le trafic vers la version www. de mon site. Cependant, en vérifiant les liens redirigés dans un dossier spécifique, j'ai remarqué quelque chose qui peut/ne peut pas être un problème.Problème htaccess avec la redirection non-www et la barre oblique finale

Fondamentalement, si je fais une vérification d'en-tête sur www.example.com/example/examplepage/ il montre 200 OK.

Si je vérifie www.example.com/example/examplepage (sans le suivi /) il montre 301 rediriger vers le haut comme il se doit.

MAIS, si je vérifie example.com/example/examplepage/ (sans www), il redirige vers www.example.com/example/examplepage.php ... qui redirige ensuite www.example.com/example/examplepage/ (la bonne page).

J'espère que cela a du sens?

a) est-ce que c'est OK?
b) Ai-je oublié quelque chose dans mon .htaccess?

RewriteOptions inherit 
RewriteEngine On 

RewriteCond %{THE_REQUEST} ^.*/index.htm 
RewriteRule ^(.*)index.htm$ http://www.example.com/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} ^example\.com [NC] 
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 


RewriteCond %{THE_REQUEST} \.php 
RewriteRule ^tips/([^.]+)\.php$ http://www.example.com/example/$1/ [R=301,L] 

RewriteRule ^tips/([^.]+[^./])$ http://www.example.com/example/$1/ [R=301,L] 

RewriteRule ^(tips/[^.]+)/$ /$1.php [L] 

S'il vous plaît noter: la règle ci-dessus PHP a été créé pour « cacher » .php extensions sur un dossier spécifique (ne voulait pas les cachés partout ailleurs).

+0

On ne sait pas pourquoi 'www.example. com/example/examplepage' devrait rediriger (ceci implique que toutes les URL devraient se terminer par une barre oblique)? Cependant, selon vos directives, seuls les chemins d'URL commençant par/tips/seront redirigés? – MrWhite

+0

oui, c'est vrai - cette redirection ne s'applique qu'au dossier/tips. Peut-être que j'aurais dû préciser que la référence "tips" aurait dû être changée en "example" pour correspondre aux références de example.com - désolé ... j'espère que cela a du sens. – Lee

+0

Je vois que vous avez changé votre exemple pour lire: "si je coche' example.com/example/examplepage/'(sans www), il redirige vers' www.example.com/example/examplepage.php' ... "- Je ne vois pas comment cela se passerait avec les directives que vous avez affichées? – MrWhite

Répondre

0

J'ai réussi à travailler sur (bien, ok - eu de la chance de deviner), mais de toute façon, cela semble fonctionner maintenant. J'ai adapté l'ordre des règles ci-dessus pour afficher les éléments suivants:

RewriteEngine On 
RewriteCond %{THE_REQUEST} \.php 
RewriteRule ^tips/([^.]+)\.php$ http://www.example.com/tips/$1/ [R=301,L] 
RewriteRule ^tips/([^.]+[^./])$ http://www.example.com/tips/$1/ [R=301,L] 
RewriteCond %{THE_REQUEST} ^.*/index.htm 
RewriteRule ^(.*)index.htm$ http://www.example.com/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} ^example\.com [NC] 
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 

RewriteRule ^(tips/[^.]+)/$ /$1.php [L] 

Il en résulte dans:

  1. http://example.com/tips/examplepage.php (et version www)
  2. http://example.com/tips/examplepage - sans slash (et version www)

Tous enfin rediriger vers www.example.com/tips/examplepage/ (avec slash)

Il assure également www.example.com/examplepage.php (pas dans le dossier "tips") conserve son extension.

Il réécrit également index.htm à/(en utilisant www et non-www).

J'ai essayé d'ajouter autant de détails que possible ici dans l'espoir qu'elle empêche quelqu'un d'autre perdre un week-end tirant les cheveux, grisaillement etc ...