У меня есть сайт, который проработал год. Я изменил доменное имя, и хостинговая компания скопировала все данные в новую учетную запись хостинга. Сайт проработал несколько дней. Теперь, без изменений, у меня есть 500 Internal Server Error
.
Журнал ошибок говорит:
/home/website/public_html/.htaccess: RewriteRule: недопустимые разделители флагов
В .htaccess
файл в public_html
в папке говорится:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?website.com$
RewriteCond %{REQUEST_URI} !^/cmsfolder/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /cmsfolder/$1
RewriteCond %{HTTP_HOST} ^(www.)?website.com$
RewriteRule ^(/)?$ cmsfolder/index.php [L]Options +Indexes
Options +Indexes
IndexOptions -FancyIndexing
Я ничего не менял, поэтому не уверен, почему веб-сайт просто переключился на ошибку сервера 500.
Честно говоря, я понятия не имею, что я с этим делаю, и хостинговая компания, похоже, тоже не знает.
RewriteRule ^(/)?$ cmsfolder/index.php [L]Options +Indexes
Это приведет к ошибке «RewriteRule: плохие разделители флагов», поскольку [L]Options
не действительный флаги аргумент. Это две объединенные директивы. Options +Indexes
- это совершенно отдельная директива, которая у вас уже есть в следующей строке, поэтому ее просто нужно удалить:
RewriteRule ^(/)?$ cmsfolder/index.php [L]
Это то, что хостинговая компания сделала на днях, хотя она работает с тех пор, как они это сделали.
Точно так, как написано, это сразу бы сломалось - значит, должно быть что-то изменилось.
Если файл не редактировался явно, тогда мой угадать это то .htaccess
файл был повторно загружен, а окончания строк были неправильно преобразованы программой FTP (возможно, при редактировании файла было несколько разных окончаний строк)?
Просто к вашему сведению (в случае, если директива была написана именно так), следующие (с пространство между [L]
и Options
) бы не привели к такой ошибке:
RewriteRule ^(/)?$ cmsfolder/index.php [L] Options +Indexes
Так как пробелы являются разделителями в файлах конфигурации Apache и всем, что находится после последнего аргумента, т.е. [L]
просто игнорируется.