Liens vers un autre dossier que www

Bonjour,

Je suis en train de remettre en place mon mini site web. Malheureusement des dossier on dut etre deplacé.

Du coup j’aimerais savoir si il est possible de renvoyer vers un dossier externe au www/…/…/ ?
Comme dans cet exemple le chemin /home/shares/…/…/…/ qui est le chemin vers mon NAS.

<html>



<head>
		<title>Film</title>
	<meta charset="utf-8">
	<link rel="stylesheet" type="text/css" href="racine/css/filmstyles.css">
</head>



<body>

<?php
$thelist=[];
$rep = './home/shares/.../.../.../';
 
if ($handle = opendir($rep)) 
{
  while (false !== ($file = readdir($handle)))
  {
    if ($file != "." && $file != ".." && !is_dir($rep.'/'.$file) ) // on s'assure que c'est bien un fichier, et pas un dossier
    {
      $thelist[] = $file;
    }
  }
 
  setlocale (LC_COLLATE,"fr_FR.UTF-8");
 
  sort($thelist,SORT_LOCALE_STRING); // tri vraiment alphabétique
 
  $listfile = '';
  foreach($thelist as $afile)
  {
    $listfile.=' <li><a href="'.$rep.'/'.$afile.'">'.$afile.'</a></li>';
  }
  $listfile = '<ul>'.$listfile.'</ul>';
 
  closedir($handle);
}
?>
<h1>Liste des fichiers:</h1>
<?= $listfile ?>
<h1>Liste des Films:</h1>

<ul>
<?php echo $thelist; ?>
 
</ul>

</body>
</html>

Les dossiers et les droits sont définis via le tag ‹ directory › dans /etc/apache2/apache2.conf

Puis tu définis, tes différents sites via les « virtual hosts » dans /etc/apache2/sites-available

C’est ce que j’ai essayé un debut mais ca me pose des petits probleme de ce type

> déc. 08 17:02:21 NAS systemd[1]: apache2.service: Control process exited, code=exited, status=1/FAILURE
> -- Subject: Unit process exited
> -- Defined-By: systemd
> -- Support: https://www.debian.org/support
> --
> -- An ExecStart= process belonging to unit apache2.service has exited.
> --
> -- The process' exit code is 'exited' and its exit status is 1.
> déc. 08 17:02:21 NAS systemd[1]: apache2.service: Failed with result 'exit-code'.
> -- Subject: Unit failed
> -- Defined-By: systemd
> -- Support: https://www.debian.org/support
> --
> -- The unit apache2.service has entered the 'failed' state with result 'exit-code'.
> déc. 08 17:02:21 NAS systemd[1]: Failed to start The Apache HTTP Server.
> -- Subject: L'unité (unit) apache2.service a échoué
> -- Defined-By: systemd
> -- Support: https://www.debian.org/support
> --
> -- L'unité (unit) apache2.service a échoué, avec le résultat failed.
> déc. 08 17:02:22 NAS sudo[30018]: pam_unix(sudo:session): session closed for user root
> déc. 08 17:02:49 NAS sudo[30099]:       pi : TTY=pts/0 ; PWD=/home/pi ; USER=root ; COMMAND=/bin/nano /etc/apache2/apache2.conf
> déc. 08 17:02:49 NAS sudo[30099]: pam_unix(sudo:session): session opened for user root by pi(uid=0)
> déc. 08 17:03:16 NAS sudo[30099]: pam_unix(sudo:session): session closed for user root
> déc. 08 17:03:17 NAS sudo[30190]:       pi : TTY=pts/0 ; PWD=/home/pi ; USER=root ; COMMAND=/bin/nano /etc/apache2/apache2.conf
> déc. 08 17:03:17 NAS sudo[30190]: pam_unix(sudo:session): session opened for user root by pi(uid=0)
> déc. 08 17:03:38 NAS sudo[30190]: pam_unix(sudo:session): session closed for user root
> déc. 08 17:03:43 NAS sudo[30282]:       pi : TTY=pts/0 ; PWD=/home/pi ; USER=root ; COMMAND=/etc/init.d/apache2 stop
> déc. 08 17:03:43 NAS sudo[30282]: pam_unix(sudo:session): session opened for user root by pi(uid=0)
> déc. 08 17:03:43 NAS sudo[30282]: pam_unix(sudo:session): session closed for user root
> déc. 08 17:03:46 NAS sudo[30321]:       pi : TTY=pts/0 ; PWD=/home/pi ; USER=root ; COMMAND=/etc/init.d/apache2 start
> déc. 08 17:03:46 NAS sudo[30321]: pam_unix(sudo:session): session opened for user root by pi(uid=0)
> déc. 08 17:03:47 NAS systemd[1]: Starting The Apache HTTP Server...
> -- Subject: L'unité (unit) apache2.service a commencé à démarrer
> -- Defined-By: systemd
> -- Support: https://www.debian.org/support
> --
> -- L'unité (unit) apache2.service a commencé à démarrer.
> déc. 08 17:03:47 NAS apachectl[30337]: apache2: Syntax error on line 176 of /etc/apache2/apache2.conf: </Directory without matching <Directory section
> déc. 08 17:03:47 NAS apachectl[30337]: Action 'start' failed.
> déc. 08 17:03:47 NAS apachectl[30337]: The Apache error log may have more information.
> déc. 08 17:03:47 NAS systemd[1]: apache2.service: Control process exited, code=exited, status=1/FAILURE
> -- Subject: Unit process exited
> -- Defined-By: systemd
> -- Support: https://www.debian.org/support
> --
> -- An ExecStart= process belonging to unit apache2.service has exited.
> --
> -- The process' exit code is 'exited' and its exit status is 1.
> déc. 08 17:03:47 NAS systemd[1]: apache2.service: Failed with result 'exit-code'.
> -- Subject: Unit failed
> -- Defined-By: systemd
> -- Support: https://www.debian.org/support
> --
> -- The unit apache2.service has entered the 'failed' state with result 'exit-code'.
> déc. 08 17:03:47 NAS systemd[1]: Failed to start The Apache HTTP Server.
> -- Subject: L'unité (unit) apache2.service a échoué
> -- Defined-By: systemd
> -- Support: https://www.debian.org/support
> --
> -- L'unité (unit) apache2.service a échoué, avec le résultat failed.
> déc. 08 17:03:47 NAS sudo[30321]: pam_unix(sudo:session): session closed for user root
> lines 1764-1825/1825 (END)

Avec cette modif :

# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

</Directory /home/shares/public/media/>
        AllowOverride None
        Require all granted
</Directory>
#<Directory /srv/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
#       Require all granted
#</Directory>

ligne 176 : </Directory /home/… -> <Directory /home/…

sauf erreur:
tu crées un fichier machin.conf dans /etc/apache2/sites-available/ , donc /etc/apache2/sites-available/machin.conf

dedans tu mets des trucs du genre

<VirtualHost *:80>
ServerName localhost
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/ba/htdocs
<Directory /var/www/html/ba/htdocs/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
LogLevel trace8
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteRule ^/parrainage/([0-9]+)/([0-9]+)((/pres|/exp|/rat|/alli)*)/image\.png$ /parrainage/image.php?id=$1&race=$2&extra=$3 [L]
RewriteRule ^/parrainage/.*/image\.png$ /parrainage/image.php? [L]
RewriteRule ^/cache(/[0-9]+)?/(.*)$ /cache/$2 [L]
RewriteRule ^/minimap(/[0-9]+)?/(background.php.*)$ /minimap/$2 [L]
</VirtualHost>

en particulier tu remplaces /var/www/html/ba/htdocs par ton dossier
puis

a2ensite machin ; service apache2 reload ; service apache2 restart
( pour enlever : a2dissite machin )

j’ai aussi u ntruc comme ça:

Alias « /WEAN/ » « /home/dindoun/Bureau/BoulotEnCours/2019 terzi wean/VERSIONS/WEAN/ »
AliasMatch « /WEAN/ » « /home/dindoun/Bureau/BoulotEnCours/2019 terzi wean/VERSIONS/WEAN/ »

<Directory « /home/dindoun/Bureau/BoulotEnCours/2019 terzi wean/VERSIONS/WEAN »>
Require all granted
</Directory>

qui peut t’aider, je ne sais plus lequel marche

Perso moi j’ai remplacé le dossier /var/www par un lien qui pointe vers le dossier de mon choix, en root, sans modifier la config d’apache pour ça. À voir ce qu’en pensent d’autres membres :wink:

evidemment ça marche
mais tu ne peux pas le faire deux fois
alros que apache sert aussi à ça : faire plusieurs sites séparés
alors que ma méthode permet d’en faire plein; et si tu vires un dossier apaches marche quand même , il te dit juste que le dossier n’est pas là

Ca va pas aller loin si c’est du localhost :slight_smile:

ensuite pour des raisons de sécurité, il faut toujours éviter le site web qui pointe vers un répertoire /home/user. sinon, tu es sur que tu vas avoir des visiteurs dans tous les coins de ton répertoire utilisateur.
Après, @DarkGagan, quand tu dis en root, qu’entends tu par là? Quant aux symlinks, on évite de faire des symlinks qui pointes sur des répertoires exterieur au DocumentRoot, toujours pour des raisons de sécurité. C’est une très très mauvaise pratique.
le répertoire racine d’apache ne doit jamais être un lien symbolique.

tout à fait : il ne faut pas pointer sur /home/

mais ce n’est pas une configuration réelle
et je peaufine les droits ( je suis toujours en 0 sur g et o )
je change toujours ce que je copie ici par rapport à la réalité.
mais j’en ai aussi un peu marre d’être paranoïd.

Oui … mais pour quel user? forcément ton user ‹ apache › qq soit son nom, donc suit @Zargos

et sur ce point ce n’est pas de la paranoïa

tout à fait
mais normalement, sauf erreur, cet utilisateur ne peut pas remonter dans d’autres dossiers , bien que dans la réalité il y a souvent un read pour others qui traine dans le /home.

… et bien d’autres choses :slight_smile:

Ah bon ?
C’est tellement vrai que c’est ce que font la plupart des gros hébergeurs en mutualisé.
Ce n’est pas en soi un problème. Tout dépend de l’utilisateur, des droits d’accès, de la configuration du serveur web, etc.

je parlmais d’un /home/user classique. Chez les hébergeurs, ils ont une configuration particulière. Tu n’y trouve pas kde, gnome, etc… dedans.

ceci dit ça ne signifie pas pour autant que les hébergeurs ont une bonne sécurité. d’un autre coté, ça fait du taf pour les ingénieurs sécurité.

Il n’y a en pas sur un serveur de manière générale. À moins que l’on parle d’une installation pour du développement. Et là les exigences de sécurité ne sont pas du tout les mes puisque dans ce cas le serveur web ne sera accessible que localement.

1 J'aime

sauf si tu l’installes chez toi
sauf si tu l’installes dans une assoc
sauf si tu l’installes dans une petite structure
sauf si tu n’as pas ton propre admin

pour un serveur de prod ok, moi je parle serveur de dev même pas accessible depuis l’extérieur

C’est quand même mieux d’avoir un serveur de dev le plus proche possible de la prod. Sinon c’est pour ça qu’on se retrouve avec des développements pas terribles (qui sont de plus en plus majoritaires malheureusement sur le web).