Невозможно сопоставить буквальную точку с регулярным выражением htaccess - PullRequest
0 голосов
/ 12 октября 2011

Проблема: я не могу понять, как сопоставить буквальную точку в моем выражении, чтобы я мог переписать строки запроса, содержащие точки.Сначала я попробовал что-то вроде этого:

RewriteRule ^([\.\w]+)$ index.php?url=$1 [L]

У меня есть скрипт php:

echo "url is: ".$_GET['url'];

, который теоретически должен выводить все, что я пишу в своем запросе.Но для любого запроса, содержащего только буквы и точки, мой скрипт всегда выводит:

url is: index.php

Я также пробовал эти выражения:

^(.+)$
^([.\w]+)$

И результат тот же.

Итак, вопрос: мои выражения неверны или это как-то связано с конфигурацией сервера?

1 Ответ

1 голос
/ 12 октября 2011

Похоже, есть еще один запрос, который обрабатывается до применения правила. Если я использую правило, которое соответствует меньше чем index.php (например, .. для сопоставления xy), результат будет таким, как ожидалось: xy.С более расслабляющими правилами, такими как .* или .+, это не работает.x.* работает нормально, однако.

Вы можете добавить еще одно условие для игнорирования запросов, например index.php:

RewriteCond %{REQUEST_FILENAME} !index\.php$
RewriteRule ^(.+)$ index.php?url=$1 [L]

Это было проверено / отлажено с:

<?php
printf("url is: %s <br>\n", htmlspecialchars(filter_input(INPUT_GET, 'url')));
echo "<pre>",htmlentities(print_R($_SERVER, 1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...