From 92a6e19c52feb90b2bf41cdabb08694f0b9ee10d Mon Sep 17 00:00:00 2001 From: rGaillard Date: Tue, 7 Aug 2012 09:37:03 +0000 Subject: [PATCH] [-] FO: Fix htaccess generation with multishop and configuration with seo rewrite on one shop and without on another shop --- classes/Tools.php | 98 ++++++++++++++++++++++++++--------------------- 1 file changed, 54 insertions(+), 44 deletions(-) diff --git a/classes/Tools.php b/classes/Tools.php index 3adccbb3e..92f709bdc 100644 --- a/classes/Tools.php +++ b/classes/Tools.php @@ -1456,9 +1456,7 @@ class ToolsCore // Default values for parameters if (is_null($path)) - $path = _PS_ROOT_DIR_.'/.htaccess'; - if (is_null($rewrite_settings)) - $rewrite_settings = (int)Configuration::get('PS_REWRITING_SETTINGS'); + $path = _PS_ROOT_DIR_.'/.htaccess'; if (is_null($cache_control)) $cache_control = (int)Configuration::get('PS_HTACCESS_CACHE_CONTROL'); if (is_null($disable_multiviews)) @@ -1498,6 +1496,7 @@ class ToolsCore $domains[$shop_url->domain][] = array( 'physical' => $shop_url->physical_uri, 'virtual' => $shop_url->virtual_uri, + 'id_shop' => $shop_url->id_shop ); } @@ -1515,64 +1514,75 @@ class ToolsCore fwrite($write_fd, "RewriteEngine on\n\n"); foreach ($domains as $domain => $list_uri) + { foreach ($list_uri as $uri) + { + $rewrite_settings = (int)Configuration::get('PS_REWRITING_SETTINGS', null, null, (int)$uri['id_shop']); + $domain_rewrite_cond = 'RewriteCond %{HTTP_HOST} ^'.$domain.'$'."\n"; // Rewrite virtual multishop uri if ($uri['virtual']) { if (!$rewrite_settings) { - fwrite($write_fd, 'RewriteCond %{HTTP_HOST} ^'.$domain.'$'."\n"); + fwrite($write_fd, $domain_rewrite_cond); fwrite($write_fd, 'RewriteRule ^'.trim($uri['virtual'], '/').'/?$ '.$uri['physical'].$uri['virtual']."index.php [L,R]\n"); } else { - fwrite($write_fd, 'RewriteCond %{HTTP_HOST} ^'.$domain.'$'."\n"); + fwrite($write_fd, $domain_rewrite_cond); fwrite($write_fd, 'RewriteRule ^'.trim($uri['virtual'], '/').'$ '.$uri['physical'].$uri['virtual']." [L,R]\n"); } - fwrite($write_fd, 'RewriteCond %{HTTP_HOST} ^'.$domain.'$'."\n"); + fwrite($write_fd, $domain_rewrite_cond); fwrite($write_fd, 'RewriteRule ^'.ltrim($uri['virtual'], '/').'(.*) '.$uri['physical']."$1 [L]\n\n"); } + + if ($rewrite_settings) + { + // Compatibility with the old image filesystem + fwrite($write_fd, "# Images\n"); + if (Configuration::get('PS_LEGACY_IMAGES')) + { + fwrite($write_fd, $domain_rewrite_cond); + fwrite($write_fd, 'RewriteRule ^([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ '._PS_PROD_IMG_.'$1-$2$3$4.jpg [L]'."\n"); + fwrite($write_fd, $domain_rewrite_cond); + fwrite($write_fd, 'RewriteRule ^([0-9]+)\-([0-9]+)(-[0-9]+)?/.+\.jpg$ '._PS_PROD_IMG_.'$1-$2$3.jpg [L]'."\n"); + } + // Rewrite product images < 100 millions + for ($i = 1; $i <= 8; $i++) + { + $img_path = $img_name = ''; + for ($j = 1; $j <= $i; $j++) + { + $img_path .= '$'.$j.'/'; + $img_name .= '$'.$j; + } + $img_name .= '$'.$j; + fwrite($write_fd, $domain_rewrite_cond); + fwrite($write_fd, 'RewriteRule ^'.str_repeat('([0-9])', $i).'(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ '._PS_PROD_IMG_.$img_path.$img_name.'$'.($j + 1).".jpg [L]\n"); + } + fwrite($write_fd, $domain_rewrite_cond); + fwrite($write_fd, 'RewriteRule ^c/([0-9]+)(\-[_a-zA-Z0-9-\.*]*)(-[0-9]+)?/.+\.jpg$ img/c/$1$2$3.jpg [L]'."\n"); + fwrite($write_fd, $domain_rewrite_cond); + fwrite($write_fd, 'RewriteRule ^c/([a-zA-Z-]+)(-[0-9]+)?/.+\.jpg$ img/c/$1$2.jpg [L]'."\n"); + } + // Redirections to dispatcher + if ($rewrite_settings) + { + fwrite($write_fd, "\n# Dispatcher\n"); + fwrite($write_fd, "RewriteCond %{REQUEST_FILENAME} -s [OR]\n"); + fwrite($write_fd, "RewriteCond %{REQUEST_FILENAME} -l [OR]\n"); + fwrite($write_fd, "RewriteCond %{REQUEST_FILENAME} -d\n"); + fwrite($write_fd, $domain_rewrite_cond); + fwrite($write_fd, "RewriteRule ^.*$ - [NC,L]\n"); + fwrite($write_fd, $domain_rewrite_cond); + fwrite($write_fd, "RewriteRule ^.*\$ index.php [NC,L]\n"); + } + } + } + // Webservice fwrite($write_fd, 'RewriteRule ^api/?(.*)$ '."webservice/dispatcher.php?url=$1 [QSA,L]\n\n"); - - if ($rewrite_settings) - { - // Compatibility with the old image filesystem - fwrite($write_fd, "# Images\n"); - if (Configuration::get('PS_LEGACY_IMAGES')) - { - fwrite($write_fd, 'RewriteRule ^([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ '._PS_PROD_IMG_.'$1-$2$3$4.jpg [L]'."\n"); - fwrite($write_fd, 'RewriteRule ^([0-9]+)\-([0-9]+)(-[0-9]+)?/.+\.jpg$ '._PS_PROD_IMG_.'$1-$2$3.jpg [L]'."\n"); - } - - // Rewrite product images < 100 millions - for ($i = 1; $i <= 8; $i++) - { - $img_path = $img_name = ''; - for ($j = 1; $j <= $i; $j++) - { - $img_path .= '$'.$j.'/'; - $img_name .= '$'.$j; - } - $img_name .= '$'.$j; - fwrite($write_fd, 'RewriteRule ^'.str_repeat('([0-9])', $i).'(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ '._PS_PROD_IMG_.$img_path.$img_name.'$'.($j + 1).".jpg [L]\n"); - } - fwrite($write_fd, 'RewriteRule ^c/([0-9]+)(\-[_a-zA-Z0-9-\.*]*)(-[0-9]+)?/.+\.jpg$ img/c/$1$2$3.jpg [L]'."\n"); - fwrite($write_fd, 'RewriteRule ^c/([a-zA-Z-]+)(-[0-9]+)?/.+\.jpg$ img/c/$1$2.jpg [L]'."\n"); - } - - // Redirections to dispatcher - if ($rewrite_settings) - { - fwrite($write_fd, "\n# Dispatcher\n"); - fwrite($write_fd, "RewriteCond %{REQUEST_FILENAME} -s [OR]\n"); - fwrite($write_fd, "RewriteCond %{REQUEST_FILENAME} -l [OR]\n"); - fwrite($write_fd, "RewriteCond %{REQUEST_FILENAME} -d\n"); - fwrite($write_fd, "RewriteRule ^.*$ - [NC,L]\n"); - fwrite($write_fd, "RewriteRule ^.*\$ index.php [NC,L]\n"); - } - fwrite($write_fd, "\n\n"); // Cache control