Bonjour,

J'ai suivi le tuto sur le router et altorouter.

https://www.youtube.com/watch?v=tbYa0rJQyoM

J'ai fait exactement comme lui en local , et lorsque je lance localhost sur le port demandé cela fonctionne parfaitement. La même chose pour mes routes dans l'index et mes .php avant la racine.

Par contre comment faire passer ça sur son site ?

J'ai le dossier /var/www/monsite. J'ai mis la racine sur public , la page d'accueil marche , le reste pas du tout , il ne reconnait aucun chemin. Et je ne peux pas require Altorouter vu que je suis ROOT et je ne peux me co qu'en root.

Comment faire pour lancer les commandes sur mon serveur ? Comment faire pour installer proprement altorouter , var-dumper , composer ?

Merci d'avance

13 réponses


jouvrard
Réponse acceptée

S'il t'as bien redirigé vers Google c'est que les .htaccess sont bien pris en compte, sinon ça n'aurait rien donné.

Il s'agit bien juste de ce qui se trouve sur cette page pour Apache dans le .htaccess?

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

Tu peux aussi mettre ces 3 lignes dans ton fichier de conf ça marche aussi, le .htaccess étant là pour le faire si on n'a pas accès au fichier "global"

Van Hohenheim
Auteur
Réponse acceptée

YES !! ENFIN !

Donc , pour ceux qui tombent sur ce topic.

J'ai mis :

<Directory /var/www/public/>
    Options Indexes FollowSymLinks
    Require all granted
    AllowOverride All
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule . index.php [L]
</Directory>

Dans /etc/apache2/apache2.conf , j'ai eu une erreur comme avant. Et je n'arrivais plus à redémarrer apache2. J'ai donc fait un :

systemctl status apache2.service

Et j'ai vu que cette le mod Rewrite n'était pas activé ! Donc dans votre fichier conf , la ligne " RewriteEngine on " , pose soucis. Pour activer le mod , il suffit juste de faire ces lignes :

-sudo a2enmod rewrite

Et ajouter ceci à la fin de votre apache2.conf :

<ifModule mod_rewrite.c>
        RewriteEngine On
</ifModule>

Ensuite on redémarre le serveur ,

  • sudo service apache2 restart

Et ça devrait marcher ! C'est le cas pour moi ! Merci à toi , tu m'as bien aidé !

Bonjour,

As-tu rediriger toutes les requêtes avec l'index.php du site par hasard?
http://altorouter.com/usage/rewrite-requests.html

J'ai edité , oui c'est bien celui de Grafikart.

J'ai fait ceci comme commande dans visual studio code :

  • composer require altorouter/altorouter
  • composer require symfony/var-dumper
  • php -S 127.0.0.1:8080 -t c:/wamp64/www/monsite/public

Cela fonctionne parfaitement avec mon index qui est exactement comme celui du tuto :

<?php
require '../vendor/autoload.php';

$uri = $_SERVER['REQUEST_URI'];
$router = new AltoRouter();

$router->map('GET', "/[*:categorie]", 'categories','produit_categorie');

$match = $router->match();
if (is_array($match)) {
    require '../elements/header.php';
    if (is_callable($match['target'])) {
        call_user_func_array($match['target'], $match['params']);
    } else {
        $params = $match['params'];
        require "../includes/{$match['target']}.php";
    }
    require '../elements/footer.php';
} else {
    require '../elements/header.php';
    require '../includes/error.php';
    require '../elements/footer.php';
}
?>

Sur mon serveur , via putty , j'ai installé composer . Mais je ne peux pas faire de composer require , parce que je suis en root et que c'est déconseiller par composer.

J'ai aussi mis ce .htaccess à la racine de mon site sur le serveur : /var/www/public (qui est ma racine via le fichier .conf de apache2)

J'y comprend rien , c'est la toute 1er fois que je fais ça , et j'avoue ne pas bien comprendre où ça coince. Pour moi c'est clairement Var-dumper et altrouter qui ne sont pas bien installé sur le serveur.

Si tu n'as pas installé Atorouter ça ne risque pas de fonctionner oui.
Après, si tu as charger le dossier "vendor" avec le reste ça devrait fonctionner, à moins que le fichier .htaccess ne soit pas pris en compte?

Dans ton fichier .htaccess rajoute cette ligne en première position: "Options +FollowSymLinks" (sans les guillemets) pour voir.

J'arrive pas via Composer require :

Do not run Composer as root/super user! See https://getcomposer.org/root for details

J'ai regardé la doc , je vois pas comment faire autrement (j'ai qu'une connexion root et je ne peux pas avoir autre chose)
Oui j'ai chargé le vendor etc.. J'ai ajouté cette ligne dans le .htaccess , aucun résultat.

Pourquoi en local 'composer require' fonctionne , mais sur le serveur il me bloque ? Je comprend pas ce que je fais de mal. J'en ai parlé a mon formateur. Il me dit qu'il est impossible de charger un .php qui n'est pas dans la racine... Mais même quand je mets tous dans public , ça ne fonctionne pas ( en faisant les changement dans l'index.php) . C'est clairement altrouter qui merde.

Ah et au cas où , ma page HOME fonctionne. C'est les autres page qui me 404.

Pour le htaccess pas pris en compte , je peux changer ça où ? Vous avez pas un tuto d'un mec qui installe de A à Z un truc en ligne avec composer ? Comment ils font les gens quand ils rentrent en production ?

La home qui fonctionne et pas les autres pages c'est typique d'un Altorouter qui ne marche pas, ou un htaccess non pris en compte.

Pour composer, à partir du moment où tu charges tout ton site il n'y a pas de souci. Ensuite ça pourra être pour les mmises à jourde packages que ça pourra être utile avec un composer update mais c'est aute chose.

Pour les fichiers PHP qui ne sont pas à la racine ça en change rien, et c'est même fait exprès.
De fait, le seul fichier qui sera "chargé" par le navigateur sera index.php, qui lui se chargera d'aller chercher les fichiers qui ne sont pas accessibles à partir du navigateur, il n'y a pas de problème là dedans.

C'est quoi ton hébergeur?

Crée-toi un nouveau .htaccess avec ça dedans:

Options +FollowSymLinks
Redirect permanent / http://www.google.fr/

Dis-moi ce que ça donne.
Normalement dès que tu vas ton site, ça te rebalancera sur Google. Si ça ne marche pas c'est que le fichier .htaccess n'est pas pris en compte.

.htaccess n'est donc pas pris en compte. Ca ne me fait rien de spécial. Je change ça où ?

EDIT : Je viens d'activer le htaccess via :

AllowOverride all , dans le conf qui concerne /var/www/ , ça me renvoie bien sur google.
Je réessaye alto

Autrement aucune idée de mon hebergeur , c'est une formation greta. Et c'est leurs serveurs.

C'est ce que j'allais te dire si ça ne fonctionnait pas, fallait voir l'activation ou non dans le fichier de conf, tu m'as devancé. :)

Ben du coup ça devrait fonctionner pour Altorouter maintenant.
Et mets bien les fichiers PHP dans un autre dossier que "public", comme tu avais fait avant quoi.

J'ai modifié le apache2.conf de /etc/apache2 , j'ai changer ceci :

 <Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>

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

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

<Directory /var/www/public/>
    Options Indexes FollowSymLinks
    Require all granted
    AllowOverride All   <<<<<<<<<<<<<<<<<<<<<<<<<<< ET ICI même si c'est inutile , on sait jamais
</Directory>

#<Directory /srv/>
#   Options Indexes FollowSymLinks
#   AllowOverride None
#   Require all granted
#</Directory>

# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.  See also the AllowOverride
# directive.
#
AccessFileName .htaccess

#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<FilesMatch "^\.ht">
    Require all denied     
</FilesMatch>

Quand j'ai changé ça et mis ton contenu dans le htaccess , la redirection vers google était bien effectué. Cependant quand je colle , l'autre htaccess j'ai une erreur

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at webmaster@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Et je comprend pas ceci :

<FilesMatch "^.ht">
Require all denied
</FilesMatch>

J'ai bien l'impression qu'il me bloque les .ht , pourquoi la redirection vers google était fonctionnel ?

Mon apache2.conf entier si ça peut t'aider (MERCI énormément pour l'aide ! )

# This is the main Apache server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See http://httpd.apache.org/docs/2.4/ for detailed information about
# the directives and /usr/share/doc/apache2/README.Debian about Debian specific
# hints.
#
#
# Summary of how the Apache 2 configuration works in Debian:
# The Apache 2 web server configuration in Debian is quite different to
# upstream's suggested way to configure the web server. This is because Debian's
# default Apache2 installation attempts to make adding and removing modules,
# virtual hosts, and extra configuration directives as flexible as possible, in
# order to make automating the changes and administering the server as easy as
# possible.

# It is split into several files forming the configuration hierarchy outlined
# below, all located in the /etc/apache2/ directory:
#
#   /etc/apache2/
#   |-- apache2.conf
#   |   `--  ports.conf
#   |-- mods-enabled
#   |   |-- *.load
#   |   `-- *.conf
#   |-- conf-enabled
#   |   `-- *.conf
#   `-- sites-enabled
#       `-- *.conf
#
#
# * apache2.conf is the main configuration file (this file). It puts the pieces
#   together by including all remaining configuration files when starting up the
#   web server.
#
# * ports.conf is always included from the main configuration file. It is
#   supposed to determine listening ports for incoming connections which can be
#   customized anytime.
#
# * Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/
#   directories contain particular configuration snippets which manage modules,
#   global configuration fragments, or virtual host configurations,
#   respectively.
#
#   They are activated by symlinking available configuration files from their
#   respective *-available/ counterparts. These should be managed by using our
#   helpers a2enmod/a2dismod, a2ensite/a2dissite and a2enconf/a2disconf. See
#   their respective man pages for detailed information.
#
# * The binary is called apache2. Due to the use of environment variables, in
#   the default configuration, apache2 needs to be started/stopped with
#   /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not
#   work with the default configuration.

# Global configuration
#

#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# NOTE!  If you intend to place this on an NFS (or otherwise network)
# mounted filesystem then please read the Mutex documentation (available
# at <URL:http://httpd.apache.org/docs/2.4/mod/core.html#mutex>);
# you will save yourself a lot of trouble.
#
# Do NOT add a slash at the end of the directory path.
#
#ServerRoot "/etc/apache2"

#
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
#
#Mutex file:${APACHE_LOCK_DIR} default

#
# The directory where shm and other runtime files will be stored.
#

DefaultRuntimeDir ${APACHE_RUN_DIR}

#
# PidFile: The file in which the server should record its process
# identification number when it starts.
# This needs to be set in /etc/apache2/envvars
#
PidFile ${APACHE_PID_FILE}

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 5

# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

#
# HostnameLookups: Log the names of clients or just their IP addresses
# e.g., www.apache.org (on) or 204.62.129.132 (off).
# The default is off because it'd be overall better for the net if people
# had to knowingly turn this feature on, since enabling it means that
# each client request will result in AT LEAST one lookup request to the
# nameserver.
#
HostnameLookups Off

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog ${APACHE_LOG_DIR}/error.log

#
# LogLevel: Control the severity of messages logged to the error_log.
# Available values: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the log level for particular modules, e.g.
# "LogLevel info ssl:warn"
#
LogLevel warn

# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# Include list of ports to listen on
Include ports.conf

# 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
    Require all granted
    AllowOverride All
</Directory>

#<Directory /srv/>
#   Options Indexes FollowSymLinks
#   AllowOverride None
#   Require all granted
#</Directory>

# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.  See also the AllowOverride
# directive.
#
AccessFileName .htaccess

#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<FilesMatch "^\.ht">
    Require all denied
</FilesMatch>

#
# The following directives define some format nicknames for use with
# a CustomLog directive.
#
# These deviate from the Common Log Format definitions in that they use %O
# (the actual bytes sent including headers) instead of %b (the size of the
# requested file), because the latter makes it impossible to detect partial
# requests.
#
# Note that the use of %{X-Forwarded-For}i instead of %h is not recommended.
# Use mod_remoteip instead.
#
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

# Include of directories ignores editors' and dpkg's backup files,
# see README.Debian for details.

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

J'ai viré le htaccess et mis ça dans le conf alors. Oui c'est bien ça

mon conf :

<Directory /var/www/>
    Options Indexes FollowSymLinks
    Require all granted
    AllowOverride All
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule . index.php [L]
</Directory>

J'ai cette erreur maintenant :

Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request

Reason: Error reading from remote server

Il faut le mettre dans le <Directory /var/www/public/>, et l'adresse où tu vas doit pointer dans ce dossier directement, pas dans "www".

Par exemple pour le site web de la boite où je bosse, le domaine https://www.blababla.com pointe dans "/var/monsite/www/public", où j'ai mon fichier index.php.

A voir le "sujet résolu", c'est donc maintenant OK?