Переписать перенаправляет простое регулярное выражение в базовый файл - PullRequest
4 голосов
/ 27 июня 2010

Я пытаюсь выполнить базовый трюк с чистым URL mod_rewrite, где /category/item переписывает в /category/index.php?id=item. В каталоге /category это есть в моем файле .htaccess:

Options +FollowSymLinks
RewriteEngine  on
RewriteBase  /category/
RewriteRule  ^(.+)$  index.php?id=$1  [L]

Он просто отлично отправляет запрос скрипту index.php, но вместо того, чтобы найти «item» в переменной id, я получаю «index.php». То есть /category/item, кажется, переписывается в /category/index.php?id=index.php.

Я пробовал бесконечные варианты, с другими / без RewriteBase и другими изменениями, но ничего не работает. Есть идеи, где я ошибся?

1 Ответ

3 голосов
/ 27 июня 2010

Проблема в том, что файл index.php находится в том же каталоге, что и htaccess, и включается и обрабатывается перезаписью.Попробуйте добавить условия перезаписи:

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

Кроме того, ввод, передаваемый параметру id, очень ненадежен.Предполагая, что вы используете числовые идентификаторы, вы можете использовать [0-9] вместо ., чтобы обеспечить передачу только чисел.Если они буквенно-цифровые, вы все равно хотите использовать что-то вроде: [a-zA-Z0-9\-_].

...