2011-01-29 2 views
3

Для простого сайта php я хочу иметь дружественные URL-адреса. Так что я бы хотел, чтобы мои URLs выглядеть следующим образом:htaccess и mod_rewrite приводят к сбою Apache с отсутствующим файлом

http://mysite.com/page/123

Что указывает на:

http://mysite.com/page.php?id=123

И это работает! Но если я укажу на файл, который отсутствует на сервере, apache spikes, и мне нужно заставить Apache выйти (развиваясь локально с MAMP, прямо сейчас).

Вот мой .htaccess файл. Есть идеи?

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule ^([^/=]+)/?([^/]*)/?$ $1.php?id=$2 [N,QSA] 

ErrorDocument 404 /404.php 
+0

апач не нравится, когда файлы, которые он требует не существует. Он даже не запустится, если я укажу файлы журнала ошибок, которые не существуют в моих vhosts. – Endophage

+0

Это тоже смущает меня, но недостающие файлы - это фаза жизни. Есть ли способ, чтобы apache правильно вел себя? Почему не правило 404 ногами? – Corey

ответ

1

Просто изменить порядок ваших двух правил и использовать флаг L вместо N:

RewriteCond $1 !.*\.php$ 
RewriteRule ^([^/=]+)/?([^/]*)/?$ $1.php?id=$2 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 
+0

Спасибо, но я думаю, что вызывает цикл перенаправления? [Sat Jan 29 02:53:48 2011] [ошибка] [клиент 127.0.0.1] mod_rewrite: максимальное количество внутренних переадресаций достигнуто. Предполагая ошибку конфигурации. Используйте «RewriteOptions MaxRedirects», чтобы увеличить предел, если это необходимо. – Corey

+0

@Corey: Исправлено. – Gumbo

+0

Отлично, это то, что мне нужно! – Corey