Я пытаюсь написать файл .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. И я не понимаю этого поведения.
Например
работает отлично. Я получаю «рисовать» в качестве параметра 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