2010-02-11 6 views
0

Ceci est un exemple de ce que j'essaie d'atteindre.Réécrire en "jolie URL"?

L'URL d'origine:
http://subdomain.domain.com/company.php?test=TES001

L'URL réécrite:
http://subdomain.domain.com/company/AAA001

Options +FollowSymLinks 
RewriteEngine on 
RewriteBase/
RewriteRule company/(.*)/(.*)/$ /company.php?$1=$2 
ErrorDocument 404/

Répondre

1

Si vous souhaitez /company.php?test=AAA001 rediriger vers /company/AAA001, faites ceci:

RewriteCond %{QUERY_STRING} test=([A-Z]+[0-9]+) 
RewriteRule ^company.php /company/%1? [R]  

Si vous voulez /company/AAA001 être réécrite comme /company.php?test=AAA001, faites ceci:

RewriteRule company/([A-Z]+[0-9]+)$ /company.php?test=$1 
+0

Merci, a parfaitement fonctionné –

1

Je pense que votre RewriteRule est écrit dans le mauvais sens, un peu en arrière, il devrait être

RewriteRule company.php?test=([A-Z]+)([0-9]+) /company/AAA$2 

Ie vous donnez d'abord le motif à faire correspondre et ensuite à quoi il est réécrit ... mais je ne suis pas sûr si vous pouvez vraiment faire correspondre les paramètres GET comme ça ...

+0

Droite. Vous ne pouvez pas faire correspondre des paramètres de chaîne de requête comme ça. RewriteRule ne regarde que le chemin (jusqu'à, mais sans inclure le point d'interrogation). Pour correspondre à la chaîne de requête, vous pouvez utiliser 'RewriteCond% {QUERY_STRING}'. Vois ma réponse. –

0

Je ne suis pas un expert mod_rewrite, mais:

RewriteRule company/(.*)/(.*)/$ /company.php?$1=$2 

ne doit pas correspondre à des expressions telles que:

/company/foo/bar/ 

et les associer dans:

/company.php?foo=bar 

Vous avez, dans votre URL, juste:

/company/foo 

Que disent les journaux Apache? Est-ce que votre .htaccess est réellement lu? Avez-vous rechargé la configuration d'Apache? (Ne me souviens pas si elle est nécessaire)

0

Vous avez la mauvaise commande ... immédiatement après "RewriteRule" est la forme de l'URL que vous voulez (c'est à dire votre URL propre), avec le Regex pour tout ce qui peut changer dans cette URL. Après cela, vous avez le chemin de l'URL, plus les jetons Regex pour les valeurs trouvées (par exemple $ 1, $ 2, etc.)

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^domain.com 
RewriteRule (.*) http://www.domain.com/$1 [R=301,L] 

ErrorDocument 400 http://www.domain.com/400 
ErrorDocument 403 http://www.domain.com/403 
ErrorDocument 404 http://www.domain.com/404 
ErrorDocument 500 http://www.domain.com/500 

RewriteEngine on 
RewriteBase/
#PAGES 

RewriteRule ^/company/([A-Z]+)([0-9]+)/$ company.php?test=$1&%{QUERY_STRING} [NC,L]