web-dev-qa-db-fra.com

Permalink personnalisé

J'essaie de créer mon site Web de sorte que example.com/profile/?name=john puisse être consulté dans une URL plus propre, telle que example.com/profile/john/.

Je le fais fonctionner afin que je puisse accéder à $_GET["name"] mais il me montre une page 404. Mon lien permanent est défini sur /%postname%/ et il me suffit d'accéder au nom du profil à l'aide de $_GET. Le nom du profil n’est pas lié à WordPress comme un auteur.

Je me demande s'il est possible de le faire sans renvoyer une page 404 et, dans l'affirmative, comment procéder. Mon code .htaccess actuel est ci-dessous:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^profile/([^/]*)/$ /profile/?name=$1 [L]
</IfModule>

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
1
Kirby

La règle personnalisée que vous essayez ne répond pas aux critères. Voici un outil astucieux en ligne .htaccess testeur à vérifier pour vérifier la logique de réécriture.

Utilisez plutôt la suite RewriteRule:

RewriteCond %{QUERY_STRING} (^|&)name=(.*)
RewriteRule ^(.*)$ /profile/%2/? [R=301,L]

Assurez-vous de remplacer ^example\.com$ sur la première ligne par votre domaine actuel.

Vous pouvez également l'intégrer dans la balise <IfModule mod_rewrite.c> créée par WordPress, qui devrait ressembler à ce qui suit comme résultat final:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# BEGIN Custom Rules
RewriteCond %{QUERY_STRING} (^|&)name=(.*)
RewriteRule ^(.*)$ /profile/%2/? [R=301,L]
</IfModule>
# END Custom Rules
# END WordPress
1