Я написал CMS
который позволяет управлять файлом .htaccess через администрирование. На моем компьютере все хорошо, и обновления происходят, и .htaccess перезаписывается, как было разработано. Однако на общем хосте в сети скрипт возвращает страницу обновления / перезаписи как пустую страницу без источника.
Просмотр через консоль js в chrome вызывает мигание следующей ошибки, которую я смог поймать на экране печати:
Хотя страница обновления возвращается пустым, а ошибка 500 мигает, сам сайт не затрагивается и отображает хотя внутреннюю ошибку.
Мой вопрос … Возможно ли, что в php.ini
или где-то еще на сервере, который я не знаю об этом, можно было бы предотвратить динамическое обновление файла .htaccess?
Моя система работает под управлением PHP 5.5.12, а сервер – 5.4.
=== ОБНОВЛЕНИЕ ВОПРОСА ===
Сервер не распознает \r
и в результате файл .htaccess выполняет рендеринг в одной строке без разрывов ссылок и комментирует сам.
Вот исходный код:
# Prevent viewing of .htaccess file if($view_htaccess == 1){ $htaccess_code .= "# Prevent viewing of .htaccess file \r"; $htaccess_code .= "<Files .htaccess> \r"; $htaccess_code .= "order allow,deny \r"; $htaccess_code .= "deny from all \r"; $htaccess_code .= "</Files> \r"; $htaccess_code .= " \r"; }
Я тоже пытался \n\r
и \r\n
… не уверен, куда идти отсюда
Спасибо за любую помощь заранее,
Пит
ПРОБЛЕМА РЕШЕНА:
В wamp на моем компьютере сервер не был \n
но распознал \r
поэтому я запрограммировал соответственно. После загрузки на сервер ошибка 500 была вызвана тем, что сервер не распознал \r
или \n
и не запускал код вместе, где он сам комментировал.
Хотя я не понимаю, почему это сработало, я решил сохранить сгенерированный код htaccess во временный текстовый файл, а затем вызвать содержимое временного текстового файла через file_get_contents('htaccess-temp.txt');
а затем сохраните его в файле htaccess.
Однако это привело к другой проблеме, когда скрипт автоматически добавлял косые черты в косые черты в пользовательских агентах робота Internet\ Ninja
которым требовалось str_replace("\\", "\\", $get_htaccess_code);
для применения к возврату file_get_contents('htaccess-temp.txt');
перед сохранением в файл htaccess. Слэш для замены с необходимостью экранирования.
Окончательный код:
$file_handle = fopen('htaccess-temp.txt', 'w'); fwrite($file_handle, $htaccess_code); fclose($file_handle); $get_htaccess_code = file_get_contents('htaccess-temp.txt'); $get_htaccess_code = str_replace("\\", "\\", $get_htaccess_code); $file_handle = fopen($level.'.htaccess', 'w'); fwrite($file_handle, $get_htaccess_code); fclose($file_handle);
Хотя это работает, я до сих пор не понимаю, почему мне сначала нужно было сохранить код в текст … и почему добавлены косые черты. Если у вас есть идеи, прокомментируйте.
Пит