web-dev-qa-db-fra.com

GoDaddy: RewriteCond dans .htaccess ne fonctionne pas avec "début de ligne" (^)

J'ai .htaccess contenant RewriteCond et RewriteRule.

Avant, cela fonctionnait très bien (cela fait longtemps que je n’ai pas vérifié), mais maintenant cela ne fonctionne plus. Je l'ai réduit à l'exemple suivant.

Supposons que je veuille rediriger www.mydomain.com/foo mais pas lorsque foo se produit ailleurs; Ainsi, par exemple, ne redirigez pas si l'URI est /abc/foo, /abcfoo ou /foobar.

Voici mon fichier .htaccess actuel:

Options -Indexes +FollowSymLinks -Multiviews

RewriteEngine On

RewriteCond  %{REQUEST_URI}  ^/foo$
RewriteRule  .  /redirect.html  [last,redirect=temp]

J'ai essayé de changer ^/foo$ de différentes manières, mais je ne parviens pas à faire fonctionner cela.

Les éléments suivants fonctionnent tous comme prévu:

foo         Redirects wherever foo appears, e.g. /abcfoobar
foo$        Redirects whenever foo appears at the end, e.g. /abc/defoo
/foo        Redirects whenever /foo appears, e.g. /abc/foobar
/foo$       Redirects whenever /foo appears at the end, e.g. /abc/foo

Ce qui suit revient toujours 404 Introuvable, peu importe ce que je mets comme adresse URI.

^foo
^/foo
^/foo$

Je ne sais pas ce qui se passe.

S'il vous plaît aidez-moi à résoudre ce problème. Si cela peut aider, j'utilise l'hébergement GoDaddy.

4
Paddy Landau

Je ne sais pas quel est le problème dans votre cas (j’ai testé votre extrait et il fonctionne comme prévu), mais peut-être que cela fonctionne pour vous:

RewriteEngine On
RewriteRule ^foo$ /redirect.html [redirect=temp,last]

Je ne suis pas un expert en .htaccess, mais je suppose que cela serait même plus rapide, car le modèle RewriteRule est traité avantRewriteCond.

4
unor

Je viens de découvrir la solution! Cela semble être une spéciale de GoDaddy.

Les domaines dans GoDaddy sont conservés dans des sous-dossiers; par exemple. mydomain.com peut se trouver dans un sous-dossier nommé md.

Curieusement, le début de %{REQUEST_URI} inclut cette chaîne. Par conséquent, mon RewriteCond aurait dû se lire:

RewriteCond  %{REQUEST_URI}  ^/md/foo$

Ce n'est pas nécessaire si la chaîne ne commence pas nécessairement au début. Cela explique mes résultats étranges.

J'ai modifié mon titre pour montrer que cela s'applique spécifiquement à GoDaddy, dans l'espoir que cela aide quelqu'un d'autre.

3
Paddy Landau