diff в моде переписать на apache 1.3 и 2.2 - PullRequest
1 голос
/ 03 августа 2009

Какая разница в mod_rewrite между Apache 1.3 (.37) и 2.2 (.11)?

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

Я написал это, и он «работает на моей машине», на котором работает Apache 2.2.11, но рабочим сервером, на котором он должен работать, является Apache 1.3.37. Я действительно новичок в переписывании модов и только начал изучать регулярные выражения этим утром. куда мне идти отсюда?

обновление: я установил Apache 1.3.37 на свой локальный компьютер. Я получаю сообщение об ошибке «Неверная команда« RewriteEngine », возможно, неправильно написана или определена модулем, не включенным в конфигурацию сервера».

обновление 2: я исправил проблему с моей локальной машиной. Теперь я получаю ту же проблему, что и на рабочем сервере.

Ответы [ 3 ]

3 голосов
/ 03 августа 2009

Apache 1. x использует Расширенные регулярные выражения POSIX , и они не понимают классы сокращенных символов, такие как \w. Итак, попробуйте это:

RewriteRule ^pages/edit(account|page)/([0-9]+)$ ./index.php?p=edit$1&id=$2
RewriteRule ^pages/([A-Za-z0-9_'-]+)$ ./index.php?p=$1
1 голос
/ 03 августа 2009

Попробуйте заменить это:

[\w'-]

с этим:

[-\w']

В некоторых синтаксических анализаторах RegEx, если вы хотите - в наборе символов, он должен быть первым символом, поскольку он имеет особое значение в наборах символов.

0 голосов
/ 03 августа 2009

Я понял это. Только последнее правило было проблемой. обратите внимание на [^ \ w] вместо [\ w'-].

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

Это работает с Apache 1.3.37, но больше не работает в Apache 2.2.11. если кто-то знает способ заставить это работать в обоих случаях, я действительно хочу понять это вместо того, чтобы просто заставить это работать.

...