2009-08-03 1 views
1

Quelle est la différence entre mod_rewrite entre Apache 1.3 (.37) et 2.2 (.11)?diff en mod rewrite sur Apache 1.3 et 2.2

RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

RewriteRule ^pages/edit(account|page)/([0-9]+)*$ ./index.php?p=edit$1&id=$2 
RewriteRule ^pages/([\w'-]+)*$ ./index.php?p=$1 

j'ai écrit ceci et cela « fonctionne sur ma machine » qui exécute Apache 2.2.11, mais le serveur de production dont il a besoin pour fonctionner sur Apache est 1.3.37. Je suis vraiment nouveau à mod réécrire et juste commencé à apprendre regex ce matin. où vais-je d'ici?

mise à jour: J'ai installé Apache 1.3.37 sur ma machine locale. Je reçois l'erreur "Commande invalide" RewriteEngine ", peut-être mal orthographiée ou définie par un module non inclus dans la configuration du serveur".

mise à jour 2: J'ai corrigé le problème que j'avais avec ma machine locale. maintenant je reçois le même problème que sur le serveur de production.

+0

Bonjour, quel est exactement le problème que vous rencontrez sur l'hôte exécutant Apache 1? Tout type d'erreur? Ou juste "rien ne se passe"? –

Répondre

3

Apache 1. x utilise expressions rationnelles POSIX et ceux qui ne comprennent pas les classes de caractères sténographiques comme \w. Donc, essayez ceci:

RewriteRule ^pages/edit(account|page)/([0-9]+)$ ./index.php?p=edit$1&id=$2 
RewriteRule ^pages/([A-Za-z0-9_'-]+)$ ./index.php?p=$1 
+0

Cela fonctionne sur les deux versions. très agréable! – Samuel

0

Je l'ai compris. Seule la dernière règle était le problème. notez le [^ \ w] au lieu de [\ w'-].

RewriteRule ^pages/([^\w]+)*$ ./index.php?p=$1 

Cela fonctionne avec Apache 1.3.37 mais ne fonctionne plus dans Apache 2.2.11. Si quelqu'un connaît un moyen de faire fonctionner cela dans les deux, je veux vraiment comprendre cela au lieu de simplement le faire fonctionner.

1

Essayez de remplacer ceci:

[\w'-] 

avec ceci:

[-\w'] 

Dans certains parseurs RegEx, si vous voulez - dans un jeu de caractères, il doit être le premier caractère, comme il l'a une signification spéciale dans les jeux de caractères.