Bloquer les pages sur les quelles on dirige une redirection

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonsoir,

j'aimerais savoir, si au moyen du fichier .htaccess on avait la possibilité de bloquer l'url d'une page sur la quelle on dirige une redirection.

Je vais un peu développer, car même moi j'ai de la pêne à comprendre ce que j'écris :p

Exemple:

1
RewriteRule ^help$ /page/help.php [L]       

Donc si j'accède à http://monsite.ext/help on est bien rediriger vers /page/help.php. Maintenant, j'aimerais que si on accède à http://monsite.ext/page/help.php que nous ayons une erreur. (404, ou une redirection, peu importe).

En vous remerciant, Bonne soirée. WinXaito.

Édité par WinXaito

+0 -0

Ca boucle ça, non ?

Une façon de l'écrire qui reste indépendante du chemin :

1
2
3
4
5
6
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule ^page/help\.php$ - [L,R=404]
# ou, pour une redirection
#RewriteRule ^page/help\.php$ help [L,R=permanent]

RewriteRule ^help$ page/help.php [L]

Édité par vibrice

+0 -0
Auteur du sujet

j'ai envie de dire que de base tout ce qui se finit par .phpdoit être introuvable. Donc je mettrais une >règle style

1
2
RewriteRule .php$ /page/404.html [L]
RewriteRule ^help$ /page/help.php [L]

Si ceci est possible et fonctionnel, ça serait super.

Ca boucle ça, non ?

Une façon de l'écrire qui reste indépendante du chemin :

1
2
3
4
5
6
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule ^page/help\.php$ - [L,R=404]
# ou, pour une redirection
#RewriteRule ^page/help\.php$ help [L,R=permanent]

RewriteRule ^help$ page/help.php [L]

vibrice

Pourrais-tu un peu m'expliquer ce que tu fais ici ? Surtout la premier ligne (RewriteCond %{ENV:REDIRECT_STATUS} ="")

En vous remerciant, WinXaito.

Édité par WinXaito

+0 -0

RewriteCond %{ENV:REDIRECT_STATUS} ="" = qu'il n'y ait pas eu de redirection/réécriture avant.

Sinon ça boucle : /help => /page/help.php => /help => /page/help.php et ainsi de suite (c'est la même chose avec /page/help.php au départ).

(avec une 404, la boucle doit s'arrêter quoiqu'il arrive en 404 sur la première fois où elle tombe sur /page/help.php si je ne m'abuse)

+0 -0
Auteur du sujet

Alors j'ai tester ceci, en effet, la solution de artragis produit une boucle (Mène toujours sur le 404.html).

Mais avec la solution de vibrice, j'ai aussi toujours un 404 qui apparait.

Si je met ceci dans mon .htaccess, je suis rediriger vers une url du type : http://www.domaine.ext/home/www/web/..../help qui me donne, bien entendu, une erreur 404.

htaccess

+0 -0

Parce que tu as besoin d'un RewriteBase (RewriteBase / a priori vu ce que tu donnes) ?

HS :

  1. pourquoi un saut de ligne entre le RewriteCond et la RewriteRule ? Parce que la RewriteCond ne s'applique qu'à la RewriteRule qui suit. Si je devais séparer mes règles, je sauterais une ligne après chaque RewriteRule surtout.
  2. personnellement, à moins que ce soit réellement justifié, je considère que des chemins absolus sur le 2e paramètre de RewriteRule en contexte de répertoire (.htaccess ou dans un bloc <Directory>) est une mauvaise pratique. D'autant que sur une de tes règles c'est du relatif et de l'absolu sur l'autre (pas très cohérent en somme). Parce que, au mieux, ils ne sont pas nécessaires ; au pire, s'ils le sont, il y a juste à le renseigner une fois via un RewriteBase = le jour où tu changes d'arborescence, ça fait une ligne à modifier au lieu d'autant qu'il y a de règles. Je n'ai jamais essayé avec un RewriteBase mais logiquement ça s'y applique aussi, mais on doit même pouvoir rendre le RewriteBase conditionnel par rapport à l'environnement (c'est plus facile à faire sur une 2.4).

Édité par vibrice

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte