重写.htaccess文件的脚本适用于wamp但不适用于网络上的共享主机

时间:2015-06-23 12:01:09

标签: php apache .htaccess

我写了CMS,允许通过管理来控制.htaccess文件。我的计算机上的一切都很好,更新发生,.htaccess按设计重写。但是,在网络上的共享主机上,脚本将更新/重写页面作为没有源的空白页面返回。

通过chrome中的js控制台查看它会闪现以下错误,我可以在打印屏幕中找到该错误:

error

虽然更新页面返回空白且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 ......不知道从哪里开始

感谢您提前获得任何帮助,

皮特

1 个答案:

答案 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);

虽然这有效但我仍然不明白为什么我必须先将代码保存到文本中...以及为什么要添加斜杠。如果您有任何想法请发表评论。

皮特