Назад | Перейти на главную страницу

Регулярное выражение htaccess работает странно

Я пытаюсь написать файл .htacess, который будет улавливать такие URL-адреса, как:

http://www.site.com/pageone.html

http://www.site.com/pagetwo.html

и перенаправим их на index.php, чтобы он получил 'Первая страница' и 'pagetwo'как параметры GET.

Ниже мой htacess:

Параметры + FollowSymlinks

AuthUserFile / dev / null

AuthGroupFile / dev / null

RewriteEngine On

RewriteOptions наследовать

RewriteRule ^ ((?:. [^ /]) +). Html $ index.php? Page = $ 1 [L]

AddHandler php5-скрипт .php

Проблема с этим регулярным выражением в том, что оно захватывает одни страницы, а на других показывает ошибку 404. И я не понимаю этого поведения.

Например

http://www.site.com/draw.html

работает отлично. Я получаю «рисовать» в качестве параметра GET в моем скрипте.

Но

http://www.site.com/draws.html

перенаправляет на страницу 404

Может ли кто-нибудь объяснить, что не так с моим htacess?

p.s. - Я вижу это на локальном сервере Apache в типичной конфигурации MAMP.

RewriteRule ^((?:.[^/])+).html$ index.php?page=$1 [L]
  • ^ = привязка в начале URI
  • (?: = расширенное выражение для группировки без создания обратной ссылки; не уверен, какова здесь цель.
  • . = соответствует одному символу.
  • [^/] = совпадать со всем, кроме косой черты
  • + = все вышеперечисленное, повторяется один или несколько раз
  • .html = должен заканчиваться на .html
  • $ = привязать конец URI.

Этот код будет соответствовать, среди прочего, /ab/cd/ef/foo.html, что никогда не произойдет в контексте каталога.
Было бы не сопоставить ресурсы или каталоги нечетной длины, поскольку вы явно игнорируете те, которые (.[^/]).

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

RewriteRule ^([^/]+).html$ index.php?page=$1 [L]

Для получения дополнительной помощи по устранению неполадок см. Документация RewriteLog