.htaccess redirection page maintenance sans CSS ?

Par kamelzagger, il y a 10 ans


Les bases HTML/CSS

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, il y a 10 ans

Toujours pas.. Message d'erreur du serveur.

kamelzagger, il y a 10 ans

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

fital, il y a 10 ans

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

met l'url avec http sur tes assets

kamelzagger, il y a 10 ans

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é...

fital, il y a 10 ans

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" />
kamelzagger, il y a 10 ans

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".

fital, il y a 10 ans

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.

kamelzagger, il y a 10 ans

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 ?

kamelzagger, il y a 10 ans

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...

tleb, il y a 10 ans

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.

nico41, il y a 10 ans

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.

kamelzagger, il y a 10 ans

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 ?

tleb, il y a 10 ans

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]
kamelzagger, il y a 10 ans

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.

kamelzagger, il y a 10 ans

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 ?

nico41, il y a 10 ans

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.

tleb, il y a 10 ans

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/.

kamelzagger, il y a 10 ans

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 ?

kamelzagger, il y a 10 ans

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

kamelzagger, il y a 10 ans

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..

kamelzagger, il y a 10 ans

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...

nico41, il y a 10 ans

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
kamelzagger, il y a 10 ans

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.

nico41, il y a 10 ans
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

kamelzagger, il y a 10 ans

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.

nico41, il y a 10 ans

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

kamelzagger, il y a 10 ans
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]
nico41, il y a 10 ans

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]
nico41, il y a 10 ans

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
kamelzagger, il y a 10 ans

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 !

nico41, il y a 10 ans

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

kamelzagger, il y a 10 ans

C'est pareil sans les '/' :(

kamelzagger, il y a 10 ans

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.

nico41, il y a 10 ans

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]
kamelzagger, il y a 10 ans

Ha oui en effet ! Ca va aussi.

Un grand merci pour ton aide.