我写了CMS
,允许通过管理来控制.htaccess文件。我的计算机上的一切都很好,更新发生,.htaccess按设计重写。但是,在网络上的共享主机上,脚本将更新/重写页面作为没有源的空白页面返回。
通过chrome中的js控制台查看它会闪现以下错误,我可以在打印屏幕中找到该错误:
虽然更新页面返回空白且500错误闪烁,但站点本身不受影响并呈现虽然发生了内部错误。
我的问题......服务器上的php.ini
或其他地方是否有设置我不知道会阻止.htaccess文件动态更新?
我的wamp运行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
......不知道从哪里开始
感谢您提前获得任何帮助,
皮特
答案 0 :(得分:0)
问题解决:
在我的计算机上的wamp中,服务器不是\n
,但确实识别出\r
,因此我进行了相应的编程。上传到服务器后,服务器无法识别\r
或\n
并将代码一起运行在自动注释的位置,导致500错误。
虽然我没有解释为什么它找到的解决方案是将生成的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);
虽然这有效但我仍然不明白为什么我必须先将代码保存到文本中...以及为什么要添加斜杠。如果您有任何想法请发表评论。
皮特