2010-08-02 16 views
0

Hey! J'ai cette question à propos de HTACCESS.HTACCESS requête compliquée

Je sais comment faire un 301 de toutes les minuscules à toutes les majuscules et vice versa, mais je suis confus avec celui-ci.

Je veux faire une redirection 301 via HTaccess. Les pages que j'ai ressemblent www.mysite.com/James ou www.mysite.com/Paul

Je veux des pages comme www.mysite.com/JAMES ou www.mysite.com/james ou www.mysite.com/jAmES à 301 rediriger vers www.mysite.com/James (cas approprié) .. une idée de comment faire cela s'il vous plaît?

+0

Est-ce que cela s'applique à * n'importe quel * nom de répertoire, ou avez-vous une liste de noms quelque part? Si oui, où? S'il vous plaît donner plus d'informations. –

+0

Hey Pekka - Merci d'avoir répondu. J'ai fait cette chose amicale de SEO. À l'origine, une page qui ressemblait à mysite.com/product.php?id=1 ressemblait maintenant à mysite.com/James. J'ai utilisé ce qui suit pour le faire: RewriteRule^(. *)/(. *) $ Destination.php? Id = $ 1 & tab = $ 2 – Arjun

Répondre

1

Je pense que vous voulez juste quelque chose comme ça, bien que Pekka mentionné il est un peu difficile de savoir avec certitude sans plus de détails:

RewriteEngine On 

RewriteCond %{REQUEST_URI} !^/[A-Z][a-z]+$ 
RewriteRule ^/?([A-Za-z])([A-Za-z]+)$ http://www.example.com/${toupper:$1}${tolower:$2} [L,R] 

Gardez à l'esprit que vous devez réellement avoir les cartes toupper et tolower défini dans la configuration de votre serveur, ce qui n'est pas possible si vous n'avez aucun contrôle sur le serveur ou sur la définition de votre hôte virtuel.

httpd.conf ou un hôte virtuel:

RewriteMap toupper int:toupper 
RewriteMap tolower int:tolower 

Comme une note de côté, je suis assez confus pourquoi les fonctions de carte interne de mod_rewrite doivent être explicitement déclarés, mais c'est ce que le code dit (et ce que le la documentation ne mentionne pas), alors voilà.

Modifier: Capitaliser un ou plusieurs mots dans une chaîne délimitée par des espaces, nous pouvons le faire:

RewriteEngine On 

RewriteCond $1 (.*)((?:\s|\A)[A-Za-z])([A-Za-z]+)$ 
RewriteCond $1 !^(\s?[A-Z][a-z]+)+$ 
RewriteRule /?(.*) %1 [N,E=CC_URL:${toupper:%2}${tolower:%3}%{ENV:CC_URL}] 

RewriteCond %{ENV:CC_URL} !="" 
RewriteRule .* http://www.example.com/$0%{ENV:CC_URL} [L,R] 

je aimerais bien tester celui-ci avant de le laisser courir dans la nature même. Je suis à peu près certain que cela devrait fonctionner correctement, mais puisqu'il y a une possibilité que cela provoque une boucle infinie et que l'un de vos enfants httpd devienne incontrôlable ... utilisez-le avec prudence.

Modifier: Oups, j'ai réalisé que la deuxième condition ne fonctionnerait pas si une partie de l'URL était réellement formatée correctement. Je l'ai changé pour être plus fiable maintenant.

+0

Merci un million Tim, donc juste pour clarifier, une URL comme mysite.com/ tIM sera réécrit comme mysite.com/Tim? Et dites qu'il y en a un qui s'appelle mysite.com/tim stack overflow (trois mots avec des espaces), cela fonctionnera-t-il aussi? – Arjun

+0

Oui. L'édition prend en charge la deuxième partie (et conserve la fonctionnalité de la première partie). –

+0

Tim, rien ne semble se produire, sauf, quand je tape l'URL sans le suivi/il me prend à la page d'accueil. Y a-t-il une chance que nous puissions interagir et que vous puissiez le faire en tant que projet pour moi? Ne vous inquiétez pas si ce n'est pas le cas. – Arjun

Questions connexes