From cd299b853743fbc93511258390fe04bde2ceafad Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Wed, 20 Apr 2016 22:00:44 +0200 Subject: [PATCH] Write .htaccess also from CLI The new updater as shipped with ownCloud 9.0.x invokes `occ` via `shell_exec`. This means that the `\OC::$CLI` code is used when updating. This removes the manual `.htaccess` modifications, effectively leading to the fact that URLs without index.php in it stop working. This also affects share URLs which could be considered a rather serious regression. - User installs 9.0.0 via web - User shares /s/1234 - User updates to 9.0.1 via ownCloud updater - Link to /s/1234 is broken, /index.php/s/1234 works --- lib/private/setup.php | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/lib/private/setup.php b/lib/private/setup.php index 6303d0d47f..d2f3802eba 100644 --- a/lib/private/setup.php +++ b/lib/private/setup.php @@ -400,12 +400,21 @@ class Setup { * Append the correct ErrorDocument path for Apache hosts */ public static function updateHtaccess() { - // From CLI we don't know the defined web root. Thus we can't write any - // directives into the .htaccess file. + $config = \OC::$server->getConfig(); + + // For CLI read the value from overwrite.cli.url if(\OC::$CLI) { - return; + $webRoot = $config->getSystemValue('overwrite.cli.url', ''); + if($webRoot === '') { + return; + } + $webRoot = parse_url($webRoot, PHP_URL_PATH); + $webRoot = rtrim($webRoot, '/'); + } else { + $webRoot = !empty(\OC::$WEBROOT) ? \OC::$WEBROOT : '/'; } - $setupHelper = new \OC\Setup(\OC::$server->getConfig(), \OC::$server->getIniWrapper(), + + $setupHelper = new \OC\Setup($config, \OC::$server->getIniWrapper(), \OC::$server->getL10N('lib'), new \OC_Defaults(), \OC::$server->getLogger(), \OC::$server->getSecureRandom()); @@ -413,13 +422,12 @@ class Setup { $content = "#### DO NOT CHANGE ANYTHING ABOVE THIS LINE ####\n"; if(strpos($htaccessContent, $content) === false) { //custom 403 error page - $content.= "\nErrorDocument 403 ".\OC::$WEBROOT."/core/templates/403.php"; + $content.= "\nErrorDocument 403 ".$webRoot."/core/templates/403.php"; //custom 404 error page - $content.= "\nErrorDocument 404 ".\OC::$WEBROOT."/core/templates/404.php"; + $content.= "\nErrorDocument 404 ".$webRoot."/core/templates/404.php"; // Add rewrite base - $webRoot = !empty(\OC::$WEBROOT) ? \OC::$WEBROOT : '/'; $content .= "\n"; $content .= "\n RewriteRule . index.php [PT,E=PATH_INFO:$1]"; $content .= "\n RewriteBase ".$webRoot;