web-dev-qa-db-fra.com

Après réécriture de la page URL introuvable

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 ..

3
user5413450

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 RewriteRulesubstitutions - 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?

1
MrWhite