Je veux réécrire mon URL actuelle qui est
http://localhost/sitename/landing-page/?from=Algeria&to=Afghanistan&submit=Submit
pour http://localhost/sitename/removals-from-Algeria-to-Afghanistan
J'ai écrit la règle de réécriture pour cela.
RewriteCond %{THE_REQUEST} ^GET\ /([^/]+)/landing-page/?\?(from)=([^&]+)&(to)=([^&\s]+) [NC]
RewriteRule ^ /%1/removals-%2-%3-%4-%5? [R=301,L]
RewriteRule ^removals-from-([^-]+)-to-([^-]+)$ /removalscenter/landing-page/?from=$1&to=$2&submit=Submit [L]
Mon code htaccess est ..
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /removalscenter/
RewriteRule ^index\.php$ - [L]
RewriteCond %{THE_REQUEST} ^GET\ /([^/]+)/landing-page/?\?(from)=([^&]+)&(to)=([^&\s]+) [NC]
RewriteRule ^ /%1/removals-%2-%3-%4-%5? [R=301,L]
RewriteRule ^removals-from-([^-]+)-to-([^-]+)$ /removalscenter/landing-page/?from=$1&to=$2&submit=Submit [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /removalscenter/index.php [L]
</IfModule>
# END WordPress
Maintenant le lien est changé .. mais cela donne une erreur de page non trouvée ..
Je suppose (en regardant votre modèle RewriteRule
) que ce fichier .htaccess se trouve dans le répertoire /removalscenter
? (Bien que les deux premières directives soient génériques, en tenant compte de <sitename>
, les directives restantes semblent être codées en dur?)
En définissant une directive RewriteBase
, vous n'avez pas besoin de spécifier le chemin complet de la variable RewriteRule
substitutions - c'est la raison de l'utilisation de RewriteBase
. Vous pouvez conserver la substitution RewriteRule
sous forme relative (simplification des règles). Par exemple:
RewriteRule . /removalscenter/index.php [L]
Peut simplement être:
RewriteRule . index.php [L]
http://localhost/sitename/landing-page/?from=Algeria&to=Afghanistan&submit=Submit
Votre exemple d'URL ne ressemble pas à l'URL complète. Il manque le document d'index, par exemple. index.php
. Si vous ne le déclarez pas explicitement, mod_dir devra le "réparer", ce qui entraînera une réécriture supplémentaire qui pourrait causer des problèmes. Donc, cela devrait être quelque chose comme:
http://localhost/sitename/landing-page/index.php?from=Algeria&to=Afghanistan&submit=Submit
De même, la barre oblique finale ne doit pas être optionnelle dans votre directive RewriteCond
.
Afin de déboguer le 404 plus loin, essayez de changer temporairement le réécriture interne en un temporaire (302) redirection externe en ajoutant un drapeau R
. Par exemple:
RewriteRule ^removals-from-([^-]+)-to-([^-]+)$ landing-page/index.php?from=$1&to=$2&submit=Submit [L,R]
Est-ce que ça redirige? Que redirige-t-il?