解决OwnCloud的No input file specified.错误

临关机睡觉前,总觉得不升级点什么睡不踏实。比如手机应用,电脑操作系统,IDE和浏览器插件之类的,都要点一圈保证是最新的。
结果今天发现没有可以更新的。。。不行,难受。那就看看Godday的host的PHP有没有新版本吧。

由于租用时间较早,当年还是PHP5.2的天下。结果PHP7都快过时了,服务器可选择的PHP版本仍然停留在PHP5。俗话说,世界上最好的PHP版本是PHP6(并没有6,直接从5到7),我退而求其次,升级到7还不行?毕竟在性能上有着天差地别。

于是乎满怀期待的点开了Program Language Version。呦,提供了
新版本 PHP5.6。行吧,总比没有强。于是痛快的选择了这个稍微高一点点的版本。

很快升级就完成了。按流程,依次点开各个服务进行回归测试。博客,正常。论坛,正常…………网盘,“No input file specified.”。糟糕了。

网盘用的是老牌私有云盘OwnCloud,网上能搜出的信息不算太多。
于是乎冷静下来,分析目前的情况。
首先,变化的只有PHP的版本,而且不是大版本变动。服务本身没有变动。
其次,其他服务,比如Wordpress等皆运行正常。

所以,推测是OwnCloud的PHP设置问题。
由于Godaddy为Shared Host,所以并不能直接修改PHP设置,而是要通过.htcaccess文件去实现基于路径的调整。随之,我找到了网盘的根目录,打开了.htcaccess。
留意到了如下片段

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
…………
</IfModule>

咦?我怎么记得RewriteEngine下面应该有个RewriteBase啊。
这小问题,于是顺手加上了“RewriteBase /”。保存。

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /
  RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
…………
</IfModule>

刷新之后,还是 “No input file specified.” 。哎呀?Wordpress的配置文件就是这么写的啊。然后又开始疯狂搜索信息,发现了很多在Godaddy上部署了Owncloud的受害者遇到过相同的问题,但是都没有找到答案。

看来还是得靠自己。经过一番努力地思考,难道因为是SharedHost,所以必须用绝对路径?而且由于当年不会给子域名加SSL,所以作为早期架起的服务,Owncloud并没有分配子域名,所以不该写根目录?
于是根据Goddady的Control Panel提供的绝对路径地址,拼上Owncloud的所在路径,写在了RewriteBase中。

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /XXXX/XXXX/XXX/99999999/html/cloud/owncloud5/
  RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
…………
</IfModule>

再次访问OwnCloud的URL,恢复正常。

总结,
1. RewriteEngine后面要接RewriteBase
2. 如果不是域名的根目录,要写全路径。
3. 如果相对路径不好用,尝试绝对路径。

PHP7什么时候才提供啊。。。GoDaddy!