Apache RewriteRule servererror 500

Я создал одностраничный веб-сайт, на котором есть выбор языка. С помощью этого селектора URL-адрес изменится на www.domain.com/en (или любой другой язык, который был выбран).

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

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L]
RewriteRule ^(scripts|images|external|css|img|js|downloads)($|/) - [L]
RewriteRule ^.*$ index.php [NC,L]

Может кто нибудь в чем проблема?

Версия Apache на живом хостинге 2.2.15 и на моем хостинге для разработчиков 2.2.3

3 ответа

Решение

Установите RewriteBase для каталога, поэтому в этом случае RewriteBase /

Изменить: (изменил ответ, чтобы фактически соответствовать решению, полученному в комментариях)

Вы должны удалить последний $ в твоем последнем RewriteRule:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L]
RewriteRule ^(scripts|images|external|css|img|js|downloads)($|/) - [L]
RewriteRule ^.*$ index.php? [NC,L]

$ является зарезервированным символом для второго параметра RewriteRule (То есть: $1, $2, $3...). Если вам нужно $ в строке запроса вы должны избежать \$,

Проблема в том, что вы не исключили пункт назначения из своего правила, поэтому правило вызывает ошибку бесконечного цикла

Замените ваше правило на

RewriteRule ^((?!index\.php).*)$ index.php [NC,L]
Другие вопросы по тегам