2009-08-02 3 views
0

У меня возникли проблемы с mod_rewrite.mod_rewrite для чистых URL-адресов дает 500 внутренних ошибок сервера

На моей странице индекса (index.php) Я показать блог и один блог запись страницы выглядит следующим образом: http://www.mydomain.com/blog/post-title

mod_rewrite для этого:

RewriteRule ^blog/([A-Za-z0-9-]+)$ index.php?postslug=$1 [L] 

Это работает как шарм ,

Но у меня есть другая страница называется artists.php и URL должен выглядеть следующим образом: http://www.mydomain.com/artists/artist-name

mod_rewrite для этого:

RewriteRule ^artists/([A-Za-z0-9-]+)$ artists.php?artistslug=$1 [L] 

Это дает мне внутреннюю ошибку сервера 500 и I понятия не имеют, почему это происходит ...

Оба index.php и artists.php находятся в корневом каталоге моего сайта

файл .htaccess:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

RewriteRule ^blog/([a-z0-9\-]+)$ index.php?postslug=$1 [L] 
RewriteRule ^artists/([a-z0-9\-]+)$ artists.php?artistslug=$1 [L] 
+0

Проверьте журналы Apache. Есть ли шанс, что artist.php вызывает его вместо mod_rewrite? –

+0

проверил его, и я получаю это сообщение: mod_rewrite: максимальное количество внутренних переадресаций достигнуто. Предполагая ошибку конфигурации. Используйте «RewriteOptions MaxRedirects», чтобы увеличить предел, если это необходимо. – Bundy

ответ

4

Попробуйте это правило вместо вашего один с двумя RewriteCond:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f 
RewriteRule ^(.*)$ $1.php [L] 

Я проверил это сам и %{REQUEST_FILENAME}, кажется, содержит неверное значение, но -f оценивается в true в любом случае.

+0

опечатка, сменила его – Bundy

+0

спасибо, что сделал трюк! – Bundy

-1

RewriteRule сам по себе отлично подходит, проверьте, возникает ли ошибка сервера, если вы напрямую обращаетесь к файлу artist.php, без перезаписи URL-адреса.

+0

Я проверил его, и он отлично работает. Как artist.php, так и artist.php? Artslug = test работают так, как они должны – Bundy

0
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
RewriteCond %{REQUEST_FILENAME} -d [NC] 
RewriteRule .* - [L] 

RewriteRule ^blog/([-A-z0-9]+)$ index.php?postslug=$1 
RewriteRule ^artists/([-A-z0-9]+)$ artists.php?artistslug=$1 
1

Включите:

RewriteLog /path/to/file.log 
RewriteLogLevel 4