Correctif spécifique à easy-hebergement (et certains autres hébergeurs)
fix erreur 500 compatible à 99%
Créations de Modules
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
si vous aussi vous rencontrez une erreur 500 sur une V4 après avoir activé la réécriture d'URL voici le fichier à modifier :
Il faudra penser à retirer
Code :
présent dans le .htaccess si vous appliquer le correctif après l'erreur 500Options +FollowSymlinks/kernel/framework/phpboost/cache/HtaccessFileCache.class.php
Version 1 (pour EH et certains hébergeurs)
Code PHP :
<?php class HtaccessFileCache implements CacheData { private $htaccess_file_content=''; private $general_config; public function synchronize() { $this->htaccess_file_content=''; $this->general_config=GeneralConfig::load(); if(ServerEnvironmentConfig::load()->is_url_rewriting_enabled()) { $this->enable_rewrite_rules(); $this->add_core_rules(); $this->add_modules_rules(); $this->add_bandwidth_protection(); $this->add_robots_protection(); } $this->add_error_redirection(); $this->add_hide_directory_listings(); $this->add_manual_content(); $this->clean_file_content(); } private function add_line($line) { $this->htaccess_file_content.="n".$line; } private function add_empty_line() { $this->add_line(''); } private function add_section($name) { $this->add_empty_line(); $this->add_line('# '.$name.' #'); } private function enable_rewrite_rules() { $this->add_section('Rewrite rules'); $this->add_line('RewriteEngine on'); } private function add_core_rules() { $this->add_section('Core'); $this->add_rewrite_rule('^user/pm-?([0-9]+)-?([0-9]{0,})-?([0-9]{0,})-?([0-9]{0,})-?([a-z_]{0,}).php$','user/pm.php?pm=$1&id=$2&p=$3"e=$4'); $eps=AppContext::get_extension_provider_service(); $mappings=$eps->get_extension_point(UrlMappingsExtensionPoint::EXTENSION_POINT); $authorized_extension_point=array('kernel','user'); foreach($mappings as $id=>$mapping_list) { if(in_array($id,$authorized_extension_point)) { $this->add_url_mapping($mapping_list); } } } private function add_modules_rules() { $this->add_section('Modules rules'); $modules=ModulesManager::get_activated_modules_map(); $eps=AppContext::get_extension_provider_service(); foreach($modules as $module) { $id=$module->get_id(); $configuration=$module->get_configuration(); $rules=$configuration->get_url_rewrite_rules(); if(!empty($rules)) { $this->add_section($id); } foreach($rules as $rule) { $this->add_line(str_replace('DIR',$this->general_config->get_site_path(),$rule)); } if($eps->provider_exists($id,UrlMappingsExtensionPoint::EXTENSION_POINT)) { $this->add_section($id); $provider=$eps->get_provider($id); $url_mappings=$provider->get_extension_point(UrlMappingsExtensionPoint::EXTENSION_POINT); $this->add_url_mapping($url_mappings); } } } private function add_rewrite_rule($match,$path,$options='L,QSA') { $this->add_line('RewriteRule '.$match.' '.$this->general_config->get_site_path().'/'.ltrim($path,'/').' ['.$options.']'); } private function add_url_mapping(UrlMappingsExtensionPoint $mapping_list) { foreach($mapping_list->list_mappings()as $mapping) { $this->add_rewrite_rule($mapping->from(),$mapping->to()); } } private function add_bandwidth_protection() { if(FileUploadConfig::load()->get_enable_bandwidth_protect()) { $this->add_section('Bandwith protection'); $this->add_line('RewriteCond %{HTTP_REFERER} !^$'); $this->add_line('RewriteCond %{HTTP_REFERER} !^'.$this->general_config->get_site_url()); $this->add_line('RewriteRule .*upload/.*$ - [F]'); } } private function add_robots_protection() { $this->add_section('Avoid Hacking Attempt'); $this->add_line('RewriteCond %{HTTP_USER_AGENT} libwww [NC]'); $this->add_line('RewriteRule .* - [F,L]'); } private function add_error_redirection() { $this->add_empty_line(); $this->add_line('# Error pages #'); $this->add_line('ErrorDocument 403 '.$this->general_config->get_site_path().UserUrlBuilder::error_403()->relative()); $this->add_line('ErrorDocument 404 '.$this->general_config->get_site_path().UserUrlBuilder::error_404()->relative()); } private function add_hide_directory_listings() { $this->add_empty_line(); $this->add_line('# Hide directory listings #'); $this->add_line('Options -Indexes'); } private function add_manual_content() { $manual_content=ServerEnvironmentConfig::load()->get_htaccess_manual_content(); if(!empty($manual_content)) { $this->add_section('Manual content'); $this->add_line($manual_content); } } private function clean_file_content() { $this->htaccess_file_content=trim($this->htaccess_file_content); } public function get_htaccess_file_content() { return $this->htaccess_file_content; } public static function load() { return CacheManager::load(__CLASS__,'kernel','htaccess-file'); } public static function invalidate() { CacheManager::invalidate('kernel','htaccess-file'); } public static function regenerate() { self::invalidate(); self::update_htaccess_file(); } private static function update_htaccess_file() { $file=new File(PATH_TO_ROOT.'/.htaccess'); try { $file->write(self::get_file_content()); $file->close(); } catch(IOException $ex) { ErrorHandler::add_error_in_log('Couldn't write the .htaccess file. Please check the site root read authorizations.',''); } } private static function get_file_content() { return self::load()->get_htaccess_file_content(); } } ?>
Version 2 (qui devrait fonctionner chez 99% des hébergeurs si la version du dessus ne fonctionne pas)
Code PHP :
<?php class HtaccessFileCache implements CacheData { private $htaccess_file_content=''; private $general_config; public function synchronize() { $this->htaccess_file_content=''; $this->general_config=GeneralConfig::load(); if(ServerEnvironmentConfig::load()->is_url_rewriting_enabled()) { $this->enable_rewrite_rules(); $this->add_core_rules(); $this->add_modules_rules(); $this->add_bandwidth_protection(); $this->add_robots_protection(); } $this->add_error_redirection(); $this->add_hide_directory_listings(); $this->add_manual_content(); $this->clean_file_content(); } private function add_line($line) { $this->htaccess_file_content.="n".$line; } private function add_empty_line() { $this->add_line(''); } private function add_section($name) { $this->add_empty_line(); $this->add_line('# '.$name.' #'); } private function enable_rewrite_rules() { $this->add_section('Rewrite rules'); $this->add_line('RewriteEngine on'); } private function add_core_rules() { $this->add_section('Core'); $this->add_rewrite_rule('^user/pm-?([0-9]+)-?([0-9]{0,})-?([0-9]{0,})-?([0-9]{0,})-?([a-z_]{0,}).php$','user/pm.php?pm=$1&id=$2&p=$3"e=$4'); $eps=AppContext::get_extension_provider_service(); $mappings=$eps->get_extension_point(UrlMappingsExtensionPoint::EXTENSION_POINT); $authorized_extension_point=array('kernel','user'); foreach($mappings as $id=>$mapping_list) { if(in_array($id,$authorized_extension_point)) { $this->add_url_mapping($mapping_list); } } } private function add_modules_rules() { $this->add_section('Modules rules'); $modules=ModulesManager::get_activated_modules_map(); $eps=AppContext::get_extension_provider_service(); foreach($modules as $module) { $id=$module->get_id(); $configuration=$module->get_configuration(); $rules=$configuration->get_url_rewrite_rules(); if(!empty($rules)) { $this->add_section($id); } foreach($rules as $rule) { $this->add_line(str_replace('DIR',$this->general_config->get_site_path(),$rule)); } if($eps->provider_exists($id,UrlMappingsExtensionPoint::EXTENSION_POINT)) { $this->add_section($id); $provider=$eps->get_provider($id); $url_mappings=$provider->get_extension_point(UrlMappingsExtensionPoint::EXTENSION_POINT); $this->add_url_mapping($url_mappings); } } } private function add_rewrite_rule($match,$path,$options='L,QSA') { $this->add_line('RewriteRule '.$match.' '.$this->general_config->get_site_path().'/'.ltrim($path,'/').' ['.$options.']'); } private function add_url_mapping(UrlMappingsExtensionPoint $mapping_list) { foreach($mapping_list->list_mappings()as $mapping) { $this->add_rewrite_rule($mapping->from(),$mapping->to()); } } private function add_bandwidth_protection() { if(FileUploadConfig::load()->get_enable_bandwidth_protect()) { $this->add_section('Bandwith protection'); $this->add_line('RewriteCond %{HTTP_REFERER} !^$'); $this->add_line('RewriteCond %{HTTP_REFERER} !^'.$this->general_config->get_site_url()); $this->add_line('RewriteRule .*upload/.*$ - [F]'); } } private function add_robots_protection() { $this->add_section('Avoid Hacking Attempt'); $this->add_line('RewriteCond %{HTTP_USER_AGENT} libwww [NC]'); $this->add_line('RewriteRule .* - [F,L]'); } private function add_error_redirection() { $this->add_empty_line(); $this->add_line('# Error pages #'); $this->add_line('ErrorDocument 403 '.$this->general_config->get_site_path().UserUrlBuilder::error_403()->relative()); $this->add_line('ErrorDocument 404 '.$this->general_config->get_site_path().UserUrlBuilder::error_404()->relative()); } private function add_hide_directory_listings() { $this->add_empty_line(); $this->add_line('# Hide directory listings #'); } private function add_manual_content() { $manual_content=ServerEnvironmentConfig::load()->get_htaccess_manual_content(); if(!empty($manual_content)) { $this->add_section('Manual content'); $this->add_line($manual_content); } } private function clean_file_content() { $this->htaccess_file_content=trim($this->htaccess_file_content); } public function get_htaccess_file_content() { return $this->htaccess_file_content; } public static function load() { return CacheManager::load(__CLASS__,'kernel','htaccess-file'); } public static function invalidate() { CacheManager::invalidate('kernel','htaccess-file'); } public static function regenerate() { self::invalidate(); self::update_htaccess_file(); } private static function update_htaccess_file() { $file=new File(PATH_TO_ROOT.'/.htaccess'); try { $file->write(self::get_file_content()); $file->close(); } catch(IOException $ex) { ErrorHandler::add_error_in_log('Couldn't write the .htaccess file. Please check the site root read authorizations.',''); } } private static function get_file_content() { return self::load()->get_htaccess_file_content(); } } ?>
Cette deuxième version enlève une option apache qui permet d'interdire le listing des répertoires, donc si vous devez utiliser la version 2 je vous conseil de crée des fichier index.html dans les zones critique de phpboost
| Liste des hébergeurs selon la "version" | |
|---|---|
| version 1 | version 2 |
| easy-hebergement.net | one.com ? |
| 1allo.com ? | |
? = non testé
Cordialement, janus57
Édité par janus57 Le 30/07/2013 à 00h20
ElenWii Membre non connecté
-
Administrateur
- Voir le profil du membre ElenWii
- Inscrit le : 14/08/2009
- Site internet
- Groupes :
-
Equipe Graphique
Est-ce que tu peux détailler les modifications ? Je pense que les devs pourrons essayer de l'intégrer en dur éventuellement.
ElenWii
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
ElenWii :
Superbe Janus,
Est-ce que tu peux détailler les modifications ? Je pense que les devs pourrons essayer de l'intégrer en dur éventuellement.
ElenWii
Est-ce que tu peux détailler les modifications ? Je pense que les devs pourrons essayer de l'intégrer en dur éventuellement.
ElenWii
Bonjour,
dans la première version j'ai supprimé la ligne 87 :
Code PHP :
$this->add_line('Options +FollowSymlinks');
Car mon hébergeur (EH) refuse cette options car elle est active par défaut dans apache2, mais pas mal d'hébergeur l'autorise encore.
Pour la seconde version j'ai supprimé la ligne 87 + 185 :
Code PHP :
$this->add_line('Options -Indexes');
Car l'option "indexes" possède une faille de sécurité et que mon hébergeur et son équipe ont corrigé sur toute leur infrastructure, par contre chez d'autres hébergeur ils l'on tout simplement désactivé plutôt que de sortir un patch.
Donc ces modification, à moins d'implanter une options dans l'administration il est impossible à supprimer vu que "indexes" empêche de fouiller dans les dossier et renvoie une erreur 403 au visiteur si il essaye de fouiller.
C'est pour cela que avant d'activer la réécriture d'URL chez EH il faut mettre le correctif version 1 sinon erreur 500
Cordialement, janus57
Édité par janus57 Le 04/09/2013 à 11h58
ElenWii Membre non connecté
-
Administrateur
- Voir le profil du membre ElenWii
- Inscrit le : 14/08/2009
- Site internet
- Groupes :
-
Equipe Graphique
ElenWii
ScreamZ Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre ScreamZ
- Inscrit le : 09/09/2013
à bientôt
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie