Forum CMS Made Simple FR

Version complète : [Clos] Problème d'url rewriting avec mod_rewrite
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.

skimpax

Bonjour,

J'ai un soucis dans mes essais de passage vers mod_rewrite.
Lorsque je charge une page, l'URL généré ne contient pas la hiérarchie (seul l'élément enfant est réécrit). Je tombe alors sur une page 404.
Je devrais avoir :
http://<mon_site>/parent/enfant.html
Et j'ai :
http://<mon_site>/enfant.html -> 404

J'ai pourtant suivi ce qui est indiqué dans le wiki.
J'ai modifié mon config.php et il contient ceci :
$config['url_rewriting'] = 'mod_rewrite';
$config['page_extension'] = '.html';
$config['use_hierarchy'] = true;
$config['query_var'] = 'page';

Le .htacces et une simple copie de celui fourni par défaut dans le répertoire /doc (et renommé) et mis sous la racine de cmsms.
J'ai vidé le cache.

Le seul point particulier est que l'hébergement ne se fait pas sous la racine mais dans un répertoire /html.
En effet, avec Filezilla, je vois 2 répertoires :
./cgi-bin
./html

Tout le contenu de CMSMS est sous ./html :
Dans le config.php j'ai :
$config['root_path'] = '/var/www/html/sites/<monSite>/html';

Est-ce la source de mes soucis ?
Comment corriger ?

Merci.

Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS : 1.6.6
#~ Version du MLE si existante :
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.6.6
#~ Installed Modules:
#~ * CMSMailer: 1.73.14
#~ * FileManager: 1.0.1
#~ * MenuManager: 1.6.2
#~ * ModuleManager: 1.3.1
#~ * News: 2.10.3
#~ * nuSOAP: 1.0.1
#~ * Printing: 1.0.4
#~ * Search: 1.6.1
#~ * ThemeManager: 1.1.1
#~ * TinyMCE: 2.6.1.1
#~ * CGExtensions: 1.17.6
#~ * Captcha: 0.4
#~ * CGSimpleSmarty: 1.4.3
#~ * Statistics: 0.9.9
#~ * Gallery: 1.1.2
#~ * CGCalendar: 1.2.5
#~ * Comments: 1.9.2
#~ * FormBuilder: 0.6.1
#~ Config Information:
#~ * php_memory_limit:
#~ * process_whole_template: false
#~ * max_upload_size: 8000000
#~ * default_upload_permission: 664
#~ * assume_mod_rewrite: true
#~ * page_extension: .html
#~ * internal_pretty_urls: false
#~ * use_hierarchy: true
#~ Php Information:
#~ * phpversion: 5.2.0-8+etch16
#~ * md5_function: On (Vrai)
#~ * gd_version: 2
#~ * tempnam_function: On (Vrai)
#~ * magic_quotes_runtime: Off (Faux)
#~ * memory_limit: 32M
#~ * max_execution_time: 30
#~ * safe_mode: Off (Faux)
#~ * session_save_path: /var/lib/php5 (1733)
#~ * session.use_cookies: On (Vrai)
#~ Server Information:
#~ * Server Api: cgi-fcgi
#~ * Server Db Type: MySQL (mysql)
#~ * Server Db Version: 5.0.32
#~ ----------------------------------------------
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
Est-ce toi qui a écrit ceci : $config['root_path'] = '/var/www/html/sites/<monSite>/html'; ?
Ne serait-ce pas plutot ceci : $config['root_path'] = '/var/www/html/sites/tonSite';
Est-ce que cela fonctionne sans le mod_rewrite ?
Sinon, qu'y a-t-il dans ton htaccess ?
Normalement, tu devrais avoir quelque chose comme ceci :
Code :
<IfModule mod_rewrite.c>
RewriteEngine on
# ici, c'est pour que tout soit redirigé sur le www
RewriteCond %{HTTP_HOST} ^tonDomaine.fr$ [NC]
RewriteRule ^(.*)$ http://www.tonDomaine.fr/$1 [R=301,L]
#RewriteCond %{HTTP_HOST} !^.*tonDomaine.fr [NC]
#RewriteRule (.*) http://www.tonDomaine.fr/$1 [R=301,L]

#Sub-dir e.g: /cmsms
RewriteBase /
# et ici, c'est pour réécrire l'url sous la forme /parent/enfant/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
</IfModule>

skimpax

Jean le Chauve a écrit :Est-ce toi qui a écrit ceci : $config['root_path'] = '/var/www/html/sites/<monSite>/html'; ?
J'ai mis <monSite> pour remplacer une chaine de caractère qui est en fait l'url publique du site, c'est en fait le site d'une école primaire (je veux éviter de publier trop d'informations avant que tout ne soit stable).
Noter que le site est hébergé par le rectorat de Nantes, donc il y a de nombreux autres sites d'où "/var/www/html/sites/". Vissiblement, ils identifient un site particulier (et donc son répertoire d'install) en utilisant l'url du site comme nom de répertoire et qui remplace <monSite>. <monSite> est en fait du type ec-xxxxxxxx.ac-nantes.fr
Par contre, le /html en fin est bien présent, ce n'est pas moi qui l'ai rajouté. Cela correspond bien à ce que vois avec Filezilla : CMSMS doit être installé sous /html, il y a un autre répertoire au même niveau (cgi-bin) mais que je n'utilise pas. J'avais essayé d'installer CMSMS directement à la racine (donc en supprimant les 2 répertoires /html et /cgi-bin), mais cela ne fonctionait pas.


Jean le Chauve a écrit :Ne serait-ce pas plutot ceci : $config['root_path'] = '/var/www/html/sites/tonSite';
Non.

Jean le Chauve a écrit :Est-ce que cela fonctionne sans le mod_rewrite ?
Fonctionne parfaitement avec l'install par défaut de CMSMS 1.6.6

Jean le Chauve a écrit :Sinon, qu'y a-t-il dans ton htaccess ?
Mon .htaccess est exactement une copie du htaccess.txt livré dans /doc de CMSMS 1.6.6.
J'ai mis le .htaccess à la racine de mon CMSMS donc dans /html.
Donc j'ai ceci :
<IfModule mod_rewrite.c>
RewriteEngine on
#
#Sub-dir e.g: /cmsms
RewriteBase /

#
# 301 Redirect all requests that don't contain a dot or trailing slash to
# include a trailing slash
# but ignore POST requests.
#RewriteCond %{REQUEST_URI} !/$
#RewriteCond %{REQUEST_URI} !\.
#RewriteCond %{REQUEST_METHOD} !POST$
#RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]

# Rewrites urls in the form of /parent/child/
# but only rewrites if the requested URL is not a file or directory
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
</IfModule>

Merci.
re,

comme tes données ne sont pas claires Wink
peut être mettre

RewriteBase /sites
skimpax a écrit :Noter que le site est hébergé par le rectorat de Nantes, donc il y a de nombreux autres sites d'où "/var/www/html/sites/". Vissiblement, ils identifient un site particulier (et donc son répertoire d'install) en utilisant l'url du site comme nom de répertoire et qui remplace <monSite>. <monSite> est en fait du type ec-xxxxxxxx.ac-nantes.fr
Fais des test sur #Sub-dir e.g: /cmsms
peur-être RewriteBase /sites
Tu devrais demander à l'administrateur de l'hébergeur.

Oups, grillé par Jc

skimpax

OK, je testerai ce soir.
Merci.

skimpax

Marche pô !
J'ai essayé divers niveaux pour la directive RewriteBase et toujours le même problème.

J'ai fait erreur sur l'analyse du problème, ce n'est pas une erreur dans la hiérarchie du chemin (je pensait qu'il manquait le /parent/ quant on devait avoir /parent/enfant/ :

J'ai une page de niveau 1 intitulée info-pratiques.
Quand je clique dessus, j'ai l'url http://<ecole>.ac-nantes.fr/info-pratiques.html qui et générée mais erreur 404.

L'url semble bon, pour j'obtiens une page 404 ?

Merci.
re Tu devrais demander à l'administrateur de l'hébergeur.
re,

RewriteEngine est bien valide
regarde dans un phpinfo !

skimpax

Après contact avec l'hébergeur, leur réponse écrite : 'Le mod_rewrite n'est pas possible sur ce serveur'.

On ne va pas s'acharner => [Clos]

Merci pour vos pistes néanmoins.
si c'est possible change d'hébergeur par ce qu'un hébergeur qui n'active pas le mod_rewrite de nos jours... comment dire ...