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]