2009-08-26 6 views
0

J'ai un fichier .htaccess à la racine d'un site Web:Comment créer une redirection 301 basée sur une chaîne de requête dans un sous-dossier?

/var/www/mywebsite/htdocs/.htacess 

et j'ai quelques fichiers dans

/var/www/mywebsite/htdocs/folder/ 

qui sont actuellement générés par index.php pc = 1234

?

Je souhaite rediriger les numéros dans la variable de chaîne de requête vers des pages html statiques dans ce dossier. Je peux y parvenir dans le fichier .htaccess à la racine du site par:

RewriteRule ^folder/\?pc=1 /folder/filename.html [R=301,L] 

Cependant, comme il y a peu de ces fichiers, il serait utile si je pouvais créer un fichier .htaccess dans:

/var/www/mywebsite/htdocs/folder/.htaccess 

Ma question est: Comment puis-je capturer la chaîne de requête et rediriger en conséquence à partir de ce dossier?

+0

Pouvez-vous être plus précis sur les règles de redirection? ? pc = 1 => nom_fichier.html,? pc = 2 => some_other_file.html,?pc = 3 => my_other_filename_that_does_not_really_correlate_to_th_number.html ou plus comme? pc = 1 => 1.html,? pc = 2 => 2.html. – Residuum

+0

Le premier: pc = 1 => filename.html, pc = 2 => some_other_file.html, pc = 3 => my_other_filename_that_does_not_really_correlate_to_th_number.html – Jenski

Répondre

2

Merci Residuum et Nerdling. Vous m'avez donné quelques idées.

C'est ce que j'ai fini avec. Ce qui suit dans /var/www/mywebsite/htdocs/folder/.htaccess

RewriteEngine On 
RewriteBase /folder 
RewriteCond %{QUERY_STRING} pc=1 
RewriteRule ^$ filename.html? [R=301,L] 

Si je ne comprend pas l'RewriteBase l'URL sera:

www.mywebsite.com/var/www/mywebsite/htdocs/folder/ 

Mais il est apparu bien que :

www.mywebsite.com/folder/filename.html 

Je devais aussi créer une règle de réécriture qui a capturé un nom de fichier vide-à-dire «^$ de » delcare alors le nom du fichier que je voulais pc = 1 aller. Résidus, Nerdling

2

Avant la RewriteRule pour 301, placez quelque chose comme ceci:

RewriteCond %{QUERY_STRING} MATCH

MATCH est tout ce que vous voulez faire correspondre. Vous pouvez en utiliser plusieurs avec le bloc [OR] à la fin.

Vous pouvez trouver plus d'informations à Apache's website.

1

Dans les sous-dossiers, utilisez uniquement l'URL relative:

RewriteEngine On 
RewriteBase /folder 
RewriteRule ^\?pc=1 filename.html [R=301,L] 
RewriteRule ^\?pc=2 someotherfilename.html [R=301,L] 

ou similaire à l'aide de RewriteCond comme Nerdling dit, mais en utilisant ignorer vos règles de réécriture, comme ceci:

# this will skip the two line for anything not matching ^folder/\?pc= 
RewriteRule !^folder/\?pc= - [S=2] 
RewriteRule ^folder/\?pc=1 /folder/filename.html [R=301,L] 
RewriteRule ^folder/\?pc=2 /folder/someotherfilename.html [R=301,L] 
# anything else will be interpreted again 

Ou utilisez le règle pour mettre fin à l'interprétation pour toute autre chose:

RewriteRule !^folder/\?pc= - [L] 
RewriteRule ^folder/\?pc=1 /folder/filename.html [R=301,L] 
RewriteRule ^folder/\?pc=2 /folder/someotherfilename.html [R=301,L] 
+0

J'ai essayé d'utiliser:? Ou pour votre .htaccess dossier:? RewriteRule^\ pc = 1 filename.html [R = 301, L] RewriteRule^\ pc = 2 someotherfilename.html [R = 301, L] mais il ne fonctionne pas. Est-ce que je dois "allumer quoi que ce soit" pour que cela fonctionne? – Jenski

+0

J'ai oublié RewriteBase, voir modifier. – Residuum

+0

J'ai ajouté dans le RewriteBase mais vient avec: "/ var/www/monwebsite/htdocs/dossier/ .htaccess: RewriteBase: argument n'est pas une URL valide" – Jenski

Questions connexes