J’essaie de migrer un ancien site vers un nouveau site construit avec concrete5. L’ancien site utilise des chaînes de requête que je ne peux pas redirect depuis Concrete5.
Il existe plusieurs catégories, comment puis-je redirect uniquement la partie requête?
example.com/portfolio/category?cat=hifi
example.com/projecten/hifi
De plus, j’ai des URL avec une requête différente nécessitant également des redirections:
example.com/portfolio/post.php?s=pagename-xxx-xxx
example.com/projecten/pagename-xxx-xxx
Aide très appréciée!
Vous devrez utiliser mod_rewrite et une condition ( RewriteCond
) correspondant à la variable de serveur QUERY_STRING
.
Essayez ce qui suit dans votre fichier racine .htaccess
au- dessus des directives mod_rewrite existantes.
RewriteEngine On # PART 1 : Redirect old category URLs RewriteCond %{QUERY_STRING} ^cat=(\w+) RewriteRule ^portfolio/category$ /projecten/%1? [R=302,L] # PART 2 : Redirect other old URLs RewriteCond %{QUERY_STRING} ^s=(pagename-\w{3}-\w{3}) RewriteRule ^portfolio/post\.php$ /projecten/%1? [R=302,L]
Cela suppose que les xxx
dans le nom de la pagename-xxx-xxx
sont 3 caractères littéraux (c.-à-d. az
, AZ
, 0-9
ou _
).
MISE À JOUR # 1: La fin ?
sur la substitution RewriteRule
est nécessaire pour supprimer la chaîne de requête de la cible. Ou utilisez l’indicateur QSD
sur Apache 2.4+.
Modifiez la redirection 302
(temporaire) vers 301
(permanent) lorsque vous êtes sûr que cela fonctionne correctement. Les redirections 301 sont mises en cache par le navigateur, ce qui peut rendre le test problématique.
MISE À JOUR # 2: En ce qui concerne l’URL mise à jour dans “PART 2”, essayez plutôt:
# PART 2 : Redirect other old URLs # To essentially remove the date prefix, eg. "YYYY-MM-DD-" RewriteCond %{QUERY_STRING} ^s=/d{4}-/d{2}-/d{2}-(.+) RewriteRule ^portfolio/post\.php$ /projecten/%1? [R=302,L]
^s=[0-9{4}]+-(.+?)/?[0-9{2}]+-(.+?)/?[0-9{2}]+-(.+?)/?(.*)$
Ceci est un peu un mélange , mais semble trop complexe pour ce que vous essayez de réaliser? Par exemple, pourquoi avez-vous besoin de faire correspondre une barre oblique facultative (c.-à-d. /?
)? Votre exemple d’URL ne contient pas de barres obliques?
Un modèle de regex tel que [0-9{4}]+
ne fait pas ce que vous pensez. Cela correspondrait à l’un des caractères 0123456789{}
une ou plusieurs fois. Ce que vous semblez essayer de faire est de faire correspondre exactement 4 chiffres. par exemple. [0-9]{4}
(identique à /d{4}
, utilisant une classe de caractères abrégée).