Cohabitation CMS : galère .htaccess

WRInaute discret
Bonjour,

Je met en place Joomla! sur un site qui contient déjà Dotclear (qui ne va plus me servir à présent, mais je le conserve pour le contenu déjà créé). Mais je galère pour faire cohabiter les 2 CMS et leur .htaccess, que voici :

php_flag register_globals off
php_flag "allow_url_fopen" "On"
php_flag "allow_url_include" "On"
php_value memory_limit 128M

################################## Errors ######################################
#ErrorDocument 301 /error/301-moved_permanently.html
#ErrorDocument 302 /error/302-moved_temporarily.html
#ErrorDocument 303 /error/303-see_other.html
#ErrorDocument 400 /error/400-bad_request.html
ErrorDocument 401 /error/401-authorization_required.html
#ErrorDocument 402 /error/402-payment_required.html
ErrorDocument 403 /error/403-forbidden.html
ErrorDocument 404 /error/404-not_found.html
#ErrorDocument 405 /error/405-method_not_allowed.html
#ErrorDocument 406 /error/406-not_acceptable.html
#ErrorDocument 407 /error/407-proxy_authentication_required.html
ErrorDocument 408 /error/408-request_timed_out.html
#ErrorDocument 409 /error/409-conflicting_request.html
#ErrorDocument 410 /error/410-gone.html
#ErrorDocument 411 /error/411-content_length_required.html
#ErrorDocument 412 /error/412-precondition_failed.html
#ErrorDocument 413 /error/413-request_entity_too_long.html
#ErrorDocument 414 /error/414-request_uri_too_long.html
#ErrorDocument 415 /error/415-unsupported_media_type.html
ErrorDocument 500 /error/500-internal_server_error.html
#ErrorDocument 501 /error/501-not_implemented.html
#ErrorDocument 502 /error/502-bad_gateway.html
ErrorDocument 503 /error/503-service_unavailable.html
#ErrorDocument 504 /error/504-gateway_timeout.html
#ErrorDocument 505 /error/505-http_version_not_supported.html
################################################################################

######################### Howto map /~user to /user ############################
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/([^/]+)$
RewriteCond %{DOCUMENT_ROOT}/%1 !-d
RewriteCond /home/sites/%{SERVER_NAME}/users/%1 -d
RewriteRule ^([^/]+)$ http://%{HTTP_HOST}/$1/ [R,L]
RewriteCond %{REQUEST_URI} ^/([^/]+)/
RewriteCond %{DOCUMENT_ROOT}/%1 !-d
RewriteCond /home/sites/%{SERVER_NAME}/users/%1 -d
RewriteRule ^([^/]+)(.+)$ /~$1/$2
################################################################################

###################### Howto map /users/user to /users/user ####################
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/users/([^/]+)$
RewriteCond %{DOCUMENT_ROOT}/%1 !-d
RewriteCond /home/sites/%{SERVER_NAME}/users/%1 -d
RewriteRule ^users/([^/]+)$ http://%{HTTP_HOST}/users/$1/ [R,L]
RewriteCond %{REQUEST_URI} ^/users/([^/]+)/
RewriteCond %{DOCUMENT_ROOT}/%1 !-d
RewriteCond /home/sites/%{SERVER_NAME}/users/%1 -d
RewriteRule ^users/([^/]+)(.+)$ /~$1/$2
################################################################################

RewriteEngine on
RewriteBase /
RewriteRule ^enregistrement-membre\.html$ /enregistrement_lmdt_v2.php [L]
RewriteRule ^connexion-membre\.html$ /connexion_lmdt_v2.php [L]
RewriteRule ^viewonline\.html$ /viewonline.php [L]
RewriteRule ^liste-membres\.html$ /memberlist.php [L]

########################## DOTCLEAR 2 REWRITING ###############################
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /dcblog.php/$1
RewriteRule ^dcblog.php$ dcblog.php/

################# Force l'utilisation des WWW dans les URLs ####################
RewriteCond %{HTTP_HOST} ^monsite\.com$ [NC]
RewriteRule ^(.*) http://www.monsite.com/$1 [QSA,L,R=301]
################################################################################

##
# @version $Id: htaccess.txt 21101 2011-04-07 15:47:33Z dextercowley $
# @package Joomla
# @copyright Copyright (C) 2005 - 2011 Open Source Matters. All rights reserved.
# @license GNU General Public License version 2 or later; see LICENSE.txt
##

##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# The line just below this section: 'Options +FollowSymLinks' may cause problems
# with some server configurations. It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file. If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url's. If they work,
# it has been set by your server administrator and you do not need it set here.
##

## Can be commented out if causes errors, see notes above.
Options +FollowSymLinks

## Mod_rewrite in use.

RewriteEngine On

## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.

## Begin - Custom redirects
#
# If you need to redirect some pages, or set a canonical non-www to
# www redirect (or vice versa), place that code here. Ensure those
# redirects use the correct RewriteRule syntax and the [R=301,L] flags.
#
## End - Custom redirects

##
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root).
##

# RewriteBase /

## Begin - Joomla! core SEF Section.
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the request is for something within the component folder,
# or for the site root, or for an extensionless URL, or the
# requested URL ends with one of the listed extensions
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End - Joomla! core SEF Section.

Les 1ères règles sont inhérentes à mon hébergement Infomaniak (je n'ai jamais cherché leur rôle d'ailleurs :oops:).

En l'état, Joomla! est ok, mais Dotclear me renvoie une erreur 500. J'ai essayé d'inverser l'ordre des règles pour mettre Joomla! avant Dotclear, mais le résultat est le même... Avez-vous une idée pour que les 2 marchent ?


Merci :wink:
 
WRInaute passionné
si les url Dotclear ne bougent plus et que leur nombre n'est pas trop important ca doit marcher avec une règle de réécriture par url (qui peuvent être regroupées si tu as une structure de répertoire virtuel ou qu'elles ont un motif particulier) à la place de la réécriture avec (.*).
 
WRInaute discret
Ce n'est pas possible dans ma configuration :( Dotclear et Joomla! sont à la racine du site. J'ai juste renommé index.php de Dotclear (en dcblog.php) pour le remplacer par celui de Joomla!

C'est vraiment techniquement impossible ? :? Il y aurait une quelconque alternative pour ne pas perdre le travail qui a déjà été fait avec Dotclear ?


Merci ! :wink:
 
WRInaute discret
forty a dit:
si les url Dotclear ne bougent plus et que leur nombre n'est pas trop important ca doit marcher avec une règle de réécriture par url (qui peuvent être regroupées si tu as une structure de répertoire virtuel ou qu'elles ont un motif particulier) à la place de la réécriture avec (.*).

Il y a près de 4000 articles Dotclear... Par contre effectivement tous les articles commencent par monsite.com/article/
 
WRInaute passionné
essaye alors en remplaçant :
Code:
RewriteRule (.*) /dcblog.php/$1
par :
Code:
RewriteRule article/(.*) /dcblog.php/article/$1
 
WRInaute accro
Mathieu M. a dit:
Je met en place Joomla! sur un site qui contient déjà Dotclear (qui ne va plus me servir à présent, mais je le conserve pour le contenu déjà créé). Mais je galère pour faire cohabiter les 2 CMS et leur .htaccess
Ton contenu Dotclear est donc devenu 'static' -> aspire avec un wget en local, vire le CMS Dotclear et son htaccess puis upload le contenu statique.
 
WRInaute accro
tu devrais commenter toutes les lignes joomla et les réintroduire par groupe d'usage ou une par une pour déjà identifier celle qui provoque le plantage 500. A partir de là connaissant la cause du problème tu aurais plus de chance de trouver une solution adaptée.
 
WRInaute discret
En commentant les lignes spécifiques à Joomla!, le souci semble venir de la dernière règle :

Code:
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]

Sans cette règle, toutes les pages de Dotclear semblent fonctionner, mais bien sûr pas celles de Joomla! :( Est-il possible de faire quelque chose ?


Merci.
 
WRInaute accro
donc alors en se mettant le truc en Français (ou presque):

# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php

SI le chemin demandé n'est pas index.php et qu'il n'a pas encore été réécrite vers index.php

# and the request is for something within the component folder,
# or for the site root, or for an extensionless URL, or the
# requested URL ends with one of the listed extensions
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]

ET que la demande est pour quelque chose dans le dossier 'component'
OU pour la racine du site,
OU pour une URL sans extension,
OU l'URL demandée se termine avec l'une des extensions répertoriées

# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f

ET que le chemin demandé / fichier ne correspondent pas directement un fichier physique

# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d

ET que le chemin demandé / fichier ne correspondent pas directement un dossier physique

# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]

ALORS réécrire la requête vers le script index.php

L'idée serait donc d'ajouter une condition supplémentaire à ce jeux de conditions de réécriture (RewriteCond) qui amène a la règle de réécriture a proprement parler (RewriteRule) (qui fait planter Dotclear et permet a Joomla de placer index.php comme une sorte de composant frontal traitant les requêtes).

Cette condition devrait interdire le traitement de RewriteRule en présence du fichier dcblog.php ou dans le cas du dossier 'article'.

donc sans garantie juste avant ou après "RewriteCond %{REQUEST_URI} !^/index\.php" (première condition)
-> RewriteCond %{REQUEST_URI} !^/dcblog\.php # pour exclure dcblog des traitements
ensuite
-> RewriteCond %{REQUEST_URI} !^(.*)/article/.* # pour exclure de la règle ce qui est dans le dossier article

si ça ne marche pas je voie mal la suite mais suis pas expert en htacces.
 
WRInaute accro
Une dernière idée en passant avant que tu nous dise 'ça marche pas', je doute que dotclear n'utilise pas des dossiers a lui situés a la racine, donc je doute que article soit le seul dossier imputé à dotclear.

Auquel cas la règle pour exclure le dossier 'article' peut être complétée pour correspondre a tous les dossiers dotclear comme suite :

RewriteCond %{REQUEST_URI} !^(.*)/(article|truc|machin|bidule|autre_dossier)/.*
 
WRInaute discret
J'ai testé, mais sans succès hélas :(

Petite précision, comme je le disais :

Mathieu M. a dit:
En commentant les lignes spécifiques à Joomla!, le souci semble venir de la dernière règle :

Code:
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]

Sans cette règle, toutes les pages de Dotclear semblent fonctionner, mais bien sûr pas celles de Joomla! :( Est-il possible de faire quelque chose ?

En l'état, et avec cette ligne commentée, Dotclear fonctionne très bien, c'est Joomla qui coince maintenant...
 
WRInaute accro
la dernière ligne est appliquée si toutes les autres avant, qui ne sont que des conditions, sont satisfaites. Quelques part elles sont donc 'neutre' vis a vis de dotclear (puisqu'elle ne déclenche rien si tu commente).

L'idée est peut être donc d'ajouter des conditions en plus qui 'isolent' les besoins de dotclear afin que la dernière ligne ne soit pas prise en compte sur les url dotclear.

Sinon je t'ai proposé une solution statique qui évite de se prendre la tête si dotclear est juste destiné a rester là en vitrine.
 
WRInaute accro
dernière chose avant d'aller me coucher :

ErrorDocument 404 /error/404-not_found.html
risque d'entrer en conflit avec la gestion des 404 de joomla (commente la pour voir).
 
WRInaute discret
zeb a dit:
Sinon je t'ai proposé une solution statique qui évite de se prendre la tête si dotclear est juste destiné a rester là en vitrine.

Je note la solution statique, mais je la garde de côté en cas de recours de la dernière chance... en effet Dotclear ne restera pas entièrement en vitrine, certaines pages vont être mises à jour de temps en temps.

zeb a dit:
ErrorDocument 404 /error/404-not_found.html

Aucun effet :(

Personne ne voit de solution à mon cas ?


Merci.
 
WRInaute passionné
La première règle de réécriture qui match une url est utilisée. Comme tu as des règles avec .* ce qui veut dire n'importe quel url, c'est la première qui est utilisée (donc là celle de dotclear).

Pour que ca puisse marcher il faut soit ajouter des conditions avec RewriteCond soit modifier les RewriteRule contenant ".*" .

Si tu n'es pas capable de nous détailler une ou plusieurs règles nous permettant de distinguer les urls gérées par tes deux CMS on ne va pas pouvoir beaucoup t'aider.
 
Discussions similaires
Haut