2010-09-22 11 views
0

Utilisation d'Apache sur un serveur Red Hat, je suis en train de réécrire l'URL du magasin d'un membre sur notre site à partir de:Apache URL Rewrite à domain.com/custom_url_name

domain.com/store.php?url=12345 

à:

domain.com/12345 

l'utilisation de ces règles, je peux l'obtenir pour travailler si je me souviens toujours d'ajouter une barre oblique fin

Options -Indexes 
Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ^store/url/(.*)$ store.php?url=$1 
RewriteRule ^(.*)/$ store.php?url=$1 

œuvres domain.com/12345/, mais domain.com/12345 ne fonctionne pas.

La suppression de la barre oblique dans la dernière ligne du code de réécriture casse beaucoup de choses. Y a-t-il un moyen de faire fonctionner cela avec ou sans cette barre oblique?

+0

Ce qui est cassée en supprimant la barre oblique? –

+0

La page ne se charge plus. – rwheindl

Répondre

0

Que faire si vous avez fait le slash optional? En outre, vous devrez probablement spécifier quelque chose de plus spécifique que (.*), car domain.com/a/b/c/d/e correspondra. Au lieu de cela, vous pouvez utiliser un character class annulé pour spécifier tout autre chose qu'une barre oblique.

RewriteRule ^([^/]*)/?$ store.php?url=$1 

Alternativement, si vous ne voulez saisir des chiffres, vous pouvez utiliser le \dshorthand class (qui correspond à un chiffre) avec un + qui précise qu'au moins un chiffre doit être présent:

RewriteRule ^(\d+)/?$ store.php?url=$1 
+0

Hmmm. Je suppose que cela s'est transformé en une regex plus compliquée. J'essaie d'utiliser n'importe quel caractère de mot, suivi par des hypens optionnels et des caractères optionnels supplémentaires. Je pense que le modèle serait: [\ w] + [- \ w] +? – rwheindl

+0

'\ w + (- \ w +) *' est probablement ce que vous cherchez (en supposant que vous ne voulez pas de tirets successifs). N'hésitez pas à commencer une autre question si vous avez plus de problèmes concernant un autre aspect de vos règles de réécriture. –

+0

Oui, c'est tout. Je vous remercie. – rwheindl

0

Votre tentative d'utilisation de ^(.*)$ échoue car elle correspond à un chemin d'URL. Utilisez un modèle plus précis que .*, peut-être \d+ pour permettre seulement un ou plusieurs chiffres:

RewriteRule ^(\d+)$ store.php?url=$1