RewriteRule 500 Ошибка Вопрос - PullRequest
1 голос
/ 21 апреля 2011

У меня настроены следующие правила перезаписи:

RewriteEngine On

RewriteRule ^api/([A-Za-z0-9-]+)$ index.php/api/$1 [NC,L]
RewriteRule ^([A-Za-z0-9-]+)$ index.php/other/$1 [NC,L]

К сожалению, это приводит к тому, что мой сервер выдает ошибку 500.Взятые по отдельности, они оба работают нормально.

Я предполагаю, что если запрос http://somesite.com/api/whatever/, первое правило будет срабатывать, перенаправляя на index.php/api/whatever/

Если что-либо, кроме "api "отправляется как второй сегмент, хотя он будет перенаправлен на index.php/other/whatever.

Является ли мое понимание каким-то недостатком?Я думал, что это пойдет по списку, и с флагом L перестанет выполняться, как только что-то попадет.Или мой синтаксис неправильный?

Приветствия

Ответы [ 3 ]

2 голосов
/ 21 апреля 2011
  1. всякий раз, когда вы получаете 500, отметьте /var/log/httpd/error_log (или эквивалентный путь в вашей системе.)
  2. Я почти уверен, что символ дефиса в вашей группе символов является синтаксической ошибкой регулярного выражения.(также флаг [NC] делает [A-Za-z] избыточным

Попробуйте:

RewriteRule ^api/([-A-Z0-9]+)$ index.php/api/$1 [NC,L]
RewriteRule ^([-A-Z0-9]+)$ index.php/other/$1 [NC,L]

Или, возможно,

RewriteRule ^api/([^/]+)$ index.php/api/$1 [NC,L]
RewriteRule ^([^/]+)$ index.php/other/$1 [NC,L]
0 голосов
/ 21 апреля 2011

Попробуйте эти правила в своем файле .htaccess:

RewriteEngine on
Options +FollowSymlinks -MultiViews

RewriteRule ^api/(.*)/?$ /index.php/api/$1 [NC,L]

RewriteCond %{REQUEST_URI} !^/index\.php/ [NC]
RewriteRule ^(.*)/?$ /index.php/other/$1 [NC,L]

Важно добавить этот RewriteCond перед вторым RewriteRule, чтобы избежать бесконечных перенаправлений.

0 голосов
/ 21 апреля 2011

Я думаю, вам нужно QSA флаг , попробуйте так:

RewriteRule ^api/(.*)$ index.php/api/$1 [QSA,NC,L]
RewriteRule ^(.*)$ index.php/other/$1 [QSA,NC,L]
...