2010-01-15 12 views
1

j'ai un site où je voudrais convertir le premier sous-dossier dans un paramètre (dans une liste des sous dossiers), alorsmod_rewrite convertir certains dossiers aux paramètres

http://localhost/mysite/folder1/dosomething.php

est affiché comme indiqué ci-dessus , mais pour PHP il ressemble:

... localhost/monsite/dosomething.php organisation = folder1

Je ne dois le faire sur certains dossiers (non ... localhost/monsite/admin/par exemple) et je dois prendre en compte la fa Je suis en train de créer un site pour plusieurs organisations, et en fonction de l'organisation, les couleurs, etc. du site devront être différentes, mais chaque organisation doit être différente. utilisera les mêmes pages, et le client veut le shortcode d'organisation dans l'URL. Je pensais que la meilleure façon de le faire serait avec mod_rewrite.

J'ai essayé:

rewriterule ^folder1/(.*) $1&organisation=folder1 [NC] 

mais ce travail ne marche pas ou gérer le fait qu'il pourrait déjà être des paramètres liés à l'URL. Quelqu'un peut-il suggérer un moyen de le faire?

salutations et merci beaucoup

Sur la base de vos commentaires:

Hmm je ne peux pas obtenir ce travail. Dans .htaccess je options + FollowSymLinks RewriteEngine sur RewriteRule^folder1 /(.*) 1 & $ = organisation folder1 [NC, QSA]

Si je passe en revue ... serveur/sitename/dossier1/destination.php Je reçois une erreur de page introuvable, et le journal de débogage htaccess indique:

(3) [perdir/var/www/sitename /] ajouter chemin informations postfix:/var/www/sitename/dossier1 ->/var/www/nom_site/dossier1/destination.php (3) [perdir/var/www/nom_site /] préfixe strip-dir: /var/www/sitename/folder1/destination.php -> folder1/destination.php (3) [perdir/var/www/sitename /] application du modèle '^ dossier1/(. ) 'à uri' dossier1/destination.php ' (2) [perdir/var/www/sitename /] réécrire' dossier1/destination.php '->' destination.php & organisation = dossier1 ' (3) [ perdir/var/www/nomdepasse /] préfixe ajouté par préfixe: destination.php & organisation = dossier1 -> /var/www/nomsite/destination.php & organisation = dossier1 (2) [perdir/var/www/sitename /] strip document_root préfixe: /var/www/sitename/destination.php & organisation = dossier1 -> /nom_site/destination.php & organisation = dossier1 (1) [perdir/var/www/sitename /] redirection interne avec/sitename/destination.php & organisation = dossier1 [REDIRECT INTERNE] (3) [perdir/var/www/sitename /] strip par-dir correction: /var/www/sitename/destination.php & organisation = dossier1 -> destination.php & organisation = dossier1 (3) [perdir/var/www/sitename /] application du modèle '^ dossier1/(.) 'à uri' destination.php & organisation = dossier1 ' (1) [perdir/var/www/nom_site /] passe par/var/www/nom_site/destination.php & organisation = folder1

+0

est-ce dans '.htaccess ou est-il directement dans (ou dans un fichier inclus à partir de)' httpd.conf' –

+0

il est en .hta? ccess – pr0fess0r

Répondre

-1

Je suggère

RewriteRule ^folder1/(.*)?(.*) $1?organisation=folder1&$2 [NC] 
RewriteRule ^folder1/(.*) $1?organisation=folder1 [NC] 

Je soupçonne quelqu'un qui est un peu niftier avec regexs pourrait combiner en une règle tho

Assurez-vous également que vous avez mod rewrite activé par ayant

RewriteEngine on 

au-dessus des règles de réécriture dans votre .htaccess

+1

La seconde règle ne sera jamais utilisée car la première va engloutir tout ce qu'elle peut contenir. –

+1

Les chaînes de requête ne font pas partie de l'URL et ne peuvent pas être utilisées dans RewriteRule. Aussi, ? est un quantificateur d'expressions régulières, signifiant "0 ou 1 occurrences du texte précédent". –

0

Pour ajouter des paramètres à la chaîne de requête (au lieu de les remplacer) utiliser le drapeau QSA:

RewriteRule ^folder1/(.*) $1&organisation=folder1 [NC,QSA] 

« Ce drapeau force le moteur de réécriture pour ajouter une partie de chaîne de requête de la chaîne de substitution à la chaîne existante, au lieu de le remplacer. .. Utilisez cette fonction lorsque vous souhaitez ajouter plus de données à la chaîne de requête par une règle de réécriture »

Voir Apache documentation for mod_rewrite

0

Les règles correctes seraient:

# rewrite for php scripts 
RewriteRule ^(folder[0-9]+)(/([^/]*\.php)?)$ .$2?organisation=$1 [NC,QSA] 
# rewrite for css and js (assuming they are relative to path of your htaccess) 
RewriteRule ^(folder[0-9]+)/(.*) ./$2 [NC,QSA] 

Bien que cela devrait fonctionner aussi si vous ne me dérange pas d'envoyer votre partout param:

RewriteRule ^(folder[0-9]+)/(.*) $2?organisation=$1 [NC,QSA]