Bonjour a tous !

J'ai besoin de votre aide concernent une redirection dans mon fichier .htaccess.

Ce que je fais

Actuellement j'ai fais ceci :

ErrorDocument 404 http://localhost:8888/ecole_bosco/404.php
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{REMOTE_ADDR} !192.168.1.127
RewriteCond %{REMOTE_ADDR} !192.168.1.106
RewriteRule .* maintenance.php

Ca fonctionne... Enfin plus ou moins.

Ce que j'obtiens

La redirection fonctionne mais affiche ma page maintenance.php toute ''cassé'', sans css quoi.

Ce que je veux

J'aimerais evidemment pouvoir garder la mise en page original. Mais je trouve pas comment et j'ai deja essayé plusieurs choses au niveau de mon fichier maintenance.php (test avec les url des css en chemin relatif) et du .htaccess.

Bref c'est un casse tête et je ne pige pas tout....

Pour info, la page maintenance.php se trouve a la racine et j'ai également un dossier /administration qui dois également être redirigé sur la page.

/ecole_bosco/
/ecole_bosco/administration/

En fait tout le site dois être redirigé sur la maintenance mais evidement avec la bonne mise en page !

Quelqu'un aurait-il une solution pour moi ? :)

Merci d'avance :D

35 réponses


kamelzagger
Auteur
Réponse acceptée

Merci tieb pour ta proposition, mais ca ne change rien.

Par contre je vient de trouver une solution. Je ne veut pas crier victoire trop vite mais ca fonctionne, la page s'affiche correctement avec ces lignes :

RewriteRule ^([A-Z/0-9/a-z/_/-]+)\.html$  maintenance.php [L,NC]
RewriteRule ^([A-Z/0-9/a-z/_/-]+)\.php$  maintenance.php [L,NC]

Par contre maintenant faut que j'exclue ma page admin.php et mon dossier administration, parce la elle pointe evidemment sur la page maintenance.

EDIT : La question principal du sujet est résolu. Pour ce qui est du problème de l'autorisation de l'IP et de l'exclusion de ma page admin.php et de mon dossier administration j'ai créer un nouveau sujet ici : https://www.grafikart.fr/forum/topics/21847

Salut, faut quand même chercher un peu non ?

met l'url avec http sur tes assets

Salut fital

Merci pour ta réponse. T'inquiete pas j'ai déjà fait plusieurs recherches et merci pour la solution que tu me proposes mais déjà essayé et de plusieurs façons :

RewriteRule .* http://localhost:8888/ecole_bosco/maintenance.php

RewriteRule (.*) http://localhost:8888/ecole_bosco/maintenance.php

RewriteRule ^(.*) http://localhost:8888/ecole_bosco/maintenance.php

RewriteRule ^.* http://localhost:8888/ecole_bosco/maintenance.php

Les 4 me renvoyent à la même erreur :

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, you@example.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.

Par contre ces 4 là :

RewriteRule .* maintenance.php

RewriteRule (.*) maintenance.php

RewriteRule ^(.*) maintenance.php

RewriteRule ^.* maintenance.php

M'affiche bien la page maintenance mais toujours avec la mise en page cassé...

Mais... quand tu ouvres ta console tu vois bien si tes assets sont chargés ou non.

J'ai l'impression que t'essaies de résoudre un soucis client du côté serveur là.

Donc je le redis, mets l'url complètes de tes assets (partie head de ton html)

Exemple :

<link rel="stylesheet" media="screen" href="style.css" />

en

<link rel="stylesheet" media="screen" href="http://domain.ltd/style.css" />

Tu parles de ca ?


localhost/:7 Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost:8888/ecole_bosco/administration/css/bootstrap.css".
localhost/:8 Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost:8888/ecole_bosco/administration/css/texte.css".
localhost/:9 Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost:8888/ecole_bosco/administration/css/default.css".

Si tes css sont bien chargés je comprends pas le soucis ^^ Essaie voir en navigation privée ou sur un autre navigateur car le soucis semble vraiment être du côté client.

Essaie aussi d'ouvrir tes fichiers css sur le navigateur depuis l'inspecteur pour voir si il y a bien du code css dedans.

Rien a faire ca veux toujours pas. Même si je met les l'URL complete. Es ce que sa viendrait du fait que je suis en localhost ? Et une fois uploader chez l'hebergeur ca marche ?

C'est incompréhensible car des fois la page s'affiche quasi bien et quand je recharge la page 3-4 fois ya tout qui casse, ou le contraire. Bref, des fois ca marches presque des fois pas... C'est à devenir fou ! Et dire que c'est la dernière chose que je dois faire et le site est finit...

Salut,

C'est tout simple : tu dis de rediriger toutes les requêtes vers ta page de maintenance. Donc, que se passe-t-il si ton client demande ton css ? Le serveur répond avec la page de maintenance. Tu peux vérifier cela en regardant le contenu des fichiers css que ton navigateur a reçu (soit F12 soit Ctrl+U puis clique sur le lien css).

Il faut rajouter une règle : les requêtes de tes fichiers css doivent bien retourner tes fichiers. Pareil pour le JS, si tu en as.

tleb a raison, dans ton htaccess, dans le cas des ip, tu rediriges tout vers maintenance.php, script, images, css etc.
Il faut ajouter des règles supplèmentaires dans ton htaccess, car meme les url absolues sont redirigées puisque tes conditions sont basées sur l'IP.

Hello tieb et nico41

Merci pour vos messages. Mais je ne comprend pas quel requetes je dois rajouter, auriez vous un exemple ?

Et rien ne sa passe quand je fait F12 ou CTRL U (pour info je suis sur Mac), même cmd U ca ne fait rien.

Vous pouvez m'aider sur la dernière règle que je dois ajouter ?

Clique-droit, Afficher le code source de la page, clique sur une stylesheet css, tu verras, ton serveur répond avec du html.

RewriteRule ^style.css$ /chemin/vers/ton/fichier.css [L]

Je vient d'essayer :

RewriteRule ^bootstrap.css$ http://localhost:8888/ecole_bosco/bootstrap.css [L]
RewriteRule ^texte.css$ http://localhost:8888/ecole_bosco/texte.css [L]
RewriteRule ^default.css$ http://localhost:8888/ecole_bosco/default.css [L]

Et c'est toujours le même problême ...

Quand je clique sur un de mes css (après avoir affiché le code source comme tu m'as dit) sa me réaffiche la page maintenance sans css...

Je vais allé me pendre. Je reviens.

Voici comment sont déclaré mes fichiers css dans ma page maintenance.php :

<link rel="stylesheet" href="css/bootstrap.css">
<link rel="stylesheet" href="css/texte.css">
<link rel="stylesheet" href="css/default.css">
<link href='https://fonts.googleapis.com/css?family=Nunito:300' rel='stylesheet' type='text/css'>

Alors a la limite je peut comprendre que la mise en page ne s'affiche pas correctement, mais même la police de googleapis ne s'affiche pas ! Pourtant c'est l'url complete... Es ce que je suis fou ? Il y a une autre erreur que je ne vois pas ?

peux tu nous expliquer le role de ton htaccess ? quel comportement tu veux obtenir ?

ce que j'en comprend :
toute requete est reecrite de par exemple /mon/chemin en /mon/chemin.php a condition que chemin.php existe et si l'ip n'est pas une des deux ips on est rediriger vers maintenance.php. c'est etrange.

Essaye :

RewriteRule ^css/bootstrap.css$ http://localhost:8888/ecole_bosco/bootstrap.css [L]
RewriteRule ^css/texte.css$ http://localhost:8888/ecole_bosco/texte.css [L]
RewriteRule ^css/default.css$ http://localhost:8888/ecole_bosco/default.css [L]

Ajout des prefixes css/.

nico41
C'est vrai que je n'ai pas était très claire, depuis le debut. Et moi même je sais plus ce que je veux exactement ^^

Enfin cela dit, pour que ce soit plus simple voici ce que je veux exactement :

Lorsque la maintenance est activé on redirige tout le site sur la page maintenance SAUF le dossier administration et le page admin.php.

Pour info ces fichier/dossier se trouve respectivement :

/ecole_bosco/admin.php  --> Pas de redirection sur la page maintenance
/ecole_bosco/administration/  --> Pas de redirection sur la page maintenance
/ecole_bosco/  --> Le site qui doit être redirigé sur la page maintenance, sauf la page admin.php (1er point)

Ce que je voulais au debut, c'est rediriger TOUT mon site (y compris l'administrion) sur la page maintenance. Après reflexion, si je redirige également la partie administration, les administrateurs pourront jamais se connecter.. Vous voyez ce que je veux dire ?

Vous avez bien compris ce que j'aimerais maintenant ? J'avais pas vue comme ca au tout debut, et je pense que c'est la solution la plus adapté pour moi comme ca.

Maintenant il faut que je redirige tout mon site sur maintenance, sauf donc admin.php et le dossier maintenance. Et toujours avec la bonne mise en page...

Sinon pour reprendre à tes questions nico41 le debut de mon .htaccess c'est pour reecrire juste mes pages en par exemple : mapage.php et mapage (ce qui est plus jolie dans l'url). Ca sa marche. Après dans l'administration on peu activer la maintenance. Lorsque l'administrateur l'active sa écrit dans le fichier .htaccess (avec un script php précemment créer), en notant la redirection et son ip (pour eviter evidemment qu'il se retrouvent sur la page de maintenance) . En fait la page maintance c'est pour tout le monde (client quoi) sauf l'administrateur. La ya deux ip mais normalement yen a qu'une.

J'espère avoir été assez claire ?

Je bien fait de ne pas crier victoire trop vite. Avec ces deux lignes, ma ligne remote_addr (pour autoriser une ip), ne fonctionne plus..

Voila donc ou j'en suis :

ErrorDocument 404 http://localhost:8888/ecole_bosco/404.php
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^([A-Z/0-9/a-z/_/-]+)\.html$  maintenance.php [L,NC]
RewriteRule ^([A-Z/0-9/a-z/_/-]+)\.php$  maintenance.php [L,NC]

Donc la redirection sur la page maintenance.php fonctionne et s'affiche correctement. (pfiouu, je peut souffler un peu..)

Maintenant il reste deux choses :

1 Autoriser une ip

Sa fonctionnait avant avec une ligne comme :

RewriteCond %{REMOTE_ADDR} !192.168.1.127

Mais plus maintenant... Capricieux ce .htaccess !

2 Exclure la page admin.php et le dossier administration

Et la.. J'ai aucune piste...

je ne suis pas un expert en réécriture apache, mais je pense que cela doit plus ou moins ressembler à ça :

RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.127 
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.106

essaye :

RewriteCond %{REQUEST_URI} !^/admin\.php$   [OR]                  ## si la requete est /admin.php
RewriteCond %{REQUEST_URI} !^/administration/.*               ## ou si la requete commence par /administration/
RewriteRule .* - [L]                                                                              ## pas de réécriture, et on ne va pas plus loin

Re nico41

Merci pour ta reponse et merci beaucoup pour t'aide !

Mais sans succès.. Avec toute ces conditions je me mélange un peu et je sais plus ou les mettres.

ErrorDocument 404 http://localhost:8888/ecole_bosco/404.php
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{REMOTE_ADDR} !192.168.1.106
RewriteRule ^([A-Z/0-9/a-z/_/-]+)\.html$  maintenance.php [L,NC]
RewriteRule ^([A-Z/0-9/a-z/_/-]+)\.php$  maintenance.php [L,NC]
RewriteCond %{REQUEST_URI} !^/admin\.php$
RewriteCond %{REQUEST_URI} !^/administration/.*
RewriteRule .* - [L]

La redirection sur page maintenance fonctionne toujours. Mais toujours pas l'IP et les pages à exclure..

Après je pense que l'ordre doit avoir une importance ? J'ai essayé de mettre le code que tu ma donné a différent endroit mais c'est pareil.

ErrorDocument 404 http://localhost:8888/ecole_bosco/404.php
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{REQUEST_URI} !^/admin\.php$
RewriteCond %{REQUEST_URI} !^/administration/.*
RewriteRule .* - [L]
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.106
RewriteRule ^.+\.html$  maintenance.php [L,NC]
RewriteRule ^.+\.php$  maintenance.php [L,NC]

en premier réécriture maPage =>maPage.php
ensuite test si on va vers l'admin (page et dossier) si oui pas de réécriture et on stop
enfin toutes les requetes vers maintenace sauf si ip = 192.168.1.106

Sur tout le site !

Je t'explique, par defaut mon fichier .htacces contient ca :

ErrorDocument 404 http://localhost:8888/ecole_bosco/404.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

Dès que l'administrateur active la maintenance, un script php rajoute ces lignes dans le fichier :

RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.106
RewriteCond %{REQUEST_URI} !^/admin(\.php)?$
RewriteCond %{REQUEST_URI} !^/administration/.*
RewriteRule .* - [L]
RewriteRule ^([A-Z/0-9/a-z/_/-]+)\.html$  maintenance.php [L,NC]
RewriteRule ^([A-Z/0-9/a-z/_/-]+)\.php$  maintenance.php [L,NC]

(Bon la ca fonctionne pas, mais c'est pour l'explication !)

Ainsi, la maintenance est activé et l'admin peu rester sur l'admin et voir le site.

Sinon ce que tu m'as envoyé. Ne fonctionne pas non plus.

Et si je met ces lignes :

RewriteCond %{REQUEST_URI} !^/admin(\.php)?$
RewriteCond %{REQUEST_URI} !^/administration/.*

avant celles ci :

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f

Mes url sont plus modifées (mapage.php en mapage), et mes liens sont du coup brisés, et je tombe sur la page 404.

relis mon précédent commentaire, je l'ai modifié après reflexion

ErrorDocument 404 http://localhost:8888/ecole_bosco/404.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{REQUEST_URI} !^/admin\.php$   [OR]                  
RewriteCond %{REQUEST_URI} !^/administration/.*               
RewriteRule .* - [L]
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.106
RewriteRule ^([A-Z/0-9/a-z/_/-]+)\.html$  maintenance.php [L,NC]
RewriteRule ^([A-Z/0-9/a-z/_/-]+)\.php$  maintenance.php [L,NC]

C'est bien la que tu voyais les lignes ? Comme ca, ya plus du tout de redirection sur la page maintenance.

Et comme ca c'est comme avant :

ErrorDocument 404 http://localhost:8888/ecole_bosco/404.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.106
RewriteRule ^([A-Z/0-9/a-z/_/-]+)\.html$  maintenance.php [L,NC]
RewriteRule ^([A-Z/0-9/a-z/_/-]+)\.php$  maintenance.php [L,NC]
RewriteCond %{REQUEST_URI} !^/admin\.php$   [OR]                  
RewriteCond %{REQUEST_URI} !^/administration/.*               
RewriteRule .* - [L]

Et comme ça ?

ErrorDocument 404 http://localhost:8888/ecole_bosco/404.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{REQUEST_URI} ^/admin\.php$                 # pas de OR et pas de ! , la partie admin ne peut pas être à la fin puisque que tu 
                                                                                                        # aura alors déjà tout redirigé vers maintenance
RewriteCond %{REQUEST_URI} ^/administration/.*\.(php|html)$               # pas de !
RewriteRule .* - [L, NC]
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.106
RewriteRule ^.+\.(php|html)$  /maintenance.php [L,NC]

Toujours pas.. Message d'erreur du serveur.

Je crois que je vais opter pour la solution de secours : header dans mes pages et je redirige si la variable maintenance existe...

derniere tentative pour moi, après j'abandonne

ErrorDocument 404 http://localhost:8888/ecole_bosco/404.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{REQUEST_URI} ^/admin\.php$ 
RewriteCond %{REQUEST_URI} ^/administration/.*\.(php|html)$              
RewriteRule .* - [L, NC]
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.106      # pas de redirection pour cette ip
RewriteCond %{SCRIPT_FILENAME} !maintenance.php         # eviter les boucles infinies
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif|css|ttf|woff) [NC] # pas de redirection pour les assets
RewriteRule .*  maintenance.php [L,NC] # tous le reste redirigé vers maintenance

Et non, toujours pas .. haha decidement. Merci beaucoup pour ton aide quand même !

Du coup je vais mettre le sujet en resolu car la question principal de ce sujet est resolu. Et refaire un nouveau sujet pour les problèmes actuels. Ce sera mieux.

Merci encore à tous pour votre aide !

une erreur peut venir des '/' devant admin et administration, il faut les enlever

C'est pareil sans les '/' :(

J'ai reussi !! Encore une fois, je veux pas crier victoire trop vite mais en tout cas pour le moment (je touche du bois) ca fonctionne !
(j'ai du enlever les ^ devant admin et administration aussi)

Voici le code qui fonctionne :

ErrorDocument 404 http://localhost:8888/ecole_bosco/404.php
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{REMOTE_ADDR} !192.168.1.127
RewriteCond %{REQUEST_URI} !admin(\.php)?$
RewriteCond %{REQUEST_URI} !/administration/.*
RewriteRule .*([A-Z/0-9/a-z/_/-]+)\.php$  maintenance.php [L,NC]

Et ca fonctionne uniquement dans cet ordre la.

cool, on était tout proche, je n'ai pas apache installé sur mon portable ( mais nginx) du coup pouvais pas tester moi meme.
je pense que tu peux réduire la dernière ligne :

RewriteRule .*([A-Z/0-9/a-z/_/-]+)\.php$  maintenance.php [L,NC]

en

RewriteRule .+\.php$  maintenance.php [L,NC]

Ha oui en effet ! Ca va aussi.

Un grand merci pour ton aide.