2010-07-31 3 views
2

Je deviens fou. La seule chose que je veux faire est d'ajouter ces règles sur le site que je développe:WordPress: Règles de réécriture personnalisées - .htaccess ou functions.php?

fastigheter-spanien/x property/X&lang=sv 
fastigheter-usa/x property/X&lang=sv 
properties-spain/X property/X&lang=en 
properties-usa/X property/X&lang=en 

où X est le nom du poste. Ce sont tous des types de publications personnalisées. La raison pour laquelle je me suis retrouvé dans cette situation est que j'utilise plusieurs langues, mais je voulais que le client n'ait pas à créer plus d'un article pour chaque article (il a beaucoup d'options et d'images, il est pratiquement inutile de le publier). question). J'ai cherché à créer des rewrite_rules dans functions.php et à modifier le fichier .htaccess, mais je n'ai pas réussi à le faire fonctionner. Ces réécritures sont si simples qu'elles ne devraient pas avoir besoin d'utiliser de fonctions. Je ne peux pas simplement adapter le fichier .htaccess?

Essayé

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_URI} !^/fastigheter-spanien/([^\./]+) 
RewriteCond %{REQUEST_URI} !^/fastigheter-usa/([^\./]+) 
RewriteCond %{REQUEST_URI} !^/properties-spain/([^\./]+) 
RewriteCond %{REQUEST_URI} !^/properties-usa/([^\./]+) 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

RewriteRule ^fastigheter-spanien/([^\./]+)$ property/$1 [L] 
RewriteRule ^fastigheter-usa/([^\./]+)$ property/$1 [L] 
RewriteRule ^properties-spain/([^\./]+)$ property/$1&lang=sv [L] 
RewriteRule ^properties-usa/([^\./]+)$ property/$1&lang=sv [L] 

Ce qui me donne une 404. Des idées?

+0

Peut-être que cette question serait mieux posée sur superuser.com? –

+0

Je ne vois pas pourquoi ce serait? –

Répondre

3

Si tout le reste échoue avec le fichier .htaccess puis il y a une solution alternative à l'accrochage dans « par plugin »

Voici un extrait d'un de mes plug-ins. Bien que, il aura besoin de quelques modifications et il doit directement raccorder à partir d'un "plugin". Un plug-in peut donc être nécessaire.

Cependant, avez-vous essayé de désactiver tous les plug-ins après avoir modifié le fichier .htaccess?

+0

Désolé, a abandonné ce problème. C'est trop énigmatique pour résoudre le mélange entre les réécritures de WordPress, les réécritures de WPML et mes réécritures pour en valoir la peine. Merci de votre aide. –

+0

Aw c'est malheureux. MAybe un jour il viendra juste comme une épiphanie – Anraiki

6

Vos réécritures devraient fonctionner correctement, mais WordPress ne voit pas vos modifications. La raison en est que WordPress lit à partir de $_SERVER['REQUEST_URI'], qui contiendra toujours le original URI de demande, au lieu de celui résultant des opérations mod_rewrite.

Je ne suis pas familier avec l'utilisation de WordPress, mais j'ai regardé une partie du code source pour d'autres questions, et il semblerait qu'il essayera également d'utiliser $_SERVER['PATH_INFO'], s'il est fourni. Par conséquent, vous pouvez essayer ceci:

AcceptPathInfo On 
RewriteEngine On 
RewriteBase/

RewriteRule ^fastigheter-(spanien|usa)/([^\./]+)$ property/$2&lang=sv 
RewriteRule ^properties-(spain|usa)/([^\./]+)$ property/$2&lang=en 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* /index.php/$0 [L] 

Je trouve que l'utilisation PATH_INFO est problématique si (et généralement ne fonctionne pas dans un contexte par répertoire, même si je ne pense pas que je suis déterminé encore pourquoi) et recommande généralement contre.

Votre autre option implique également de travailler un peu sur le côté PHP. Vous pouvez faire quelque chose de similaire à Anraiki suggested, ou vous pouvez simplement dire $_SERVER['REQUEST_URI'] pour être ce que vous attendez. Si mod_rewrite effectue une redirection, le module REQUEST_URI voit qu'il est stocké dans la variable REDIRECT_URL du serveur.Ainsi, le réglage de la ruleset rewrite un peu, nous pouvons le faire:

RewriteEngine On 
RewriteBase/

# Force L on these rules to cause the REQUEST_URI to be changed (so that 
# REDIRECT_URL will end up with the rewritten value we want) 
RewriteRule ^fastigheter-(spanien|usa)/([^\./]+)$ property/$2&lang=sv [L] 
RewriteRule ^properties-(spain|usa)/([^\./]+)$ property/$2&lang=en [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

Puis, quelque part très tôt dans le traitement WordPress (comme dans index.php, puisque vous ne devriez pas probablement besoin de mettre à jour ce fichier avec WordPress ultérieure de presse), vous pouvez effectuer les opérations suivantes:

if (!empty($_SERVER['REDIRECT_URL'])) 
    $_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_URL']; 

il peut très bien être un moyen de définir votre comportement dans WordPress en utilisant les paramètres permalien eux-mêmes, car il n'itérer sur cette liste de règles dans l'analyse de la demande, mais je Je ne suis pas tout à fait clair sur les détails de ce que je ne l'ai jamais utilisé moi-même. Si cela est possible, je considère que c'est la façon recommandée de gérer cette situation, mais de toute façon, j'espère que l'une de ces options devrait faire en sorte que les choses fonctionnent pour vous.

+0

Désolé, a abandonné ce problème. C'est trop énigmatique pour résoudre le mélange entre les réécritures de WordPress, les réécritures de WPML et mes réécritures pour en valoir la peine. Merci de votre aide. –

Questions connexes