mod_rewrite для чистых URL дает 500 внутренних ошибок сервера - PullRequest
0 голосов
/ 02 августа 2009

У меня проблемы с mod_rewrite.

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

mod_rewrite для этого:

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

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

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

mod_rewrite для этого:

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

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

И index.php, и arts.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]

Ответы [ 4 ]

4 голосов
/ 02 августа 2009

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

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

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

1 голос
/ 02 августа 2009

Включите:

RewriteLog /path/to/file.log
RewriteLogLevel 4
0 голосов
/ 02 августа 2009
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
0 голосов
/ 02 августа 2009

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

...