2015-11-21 1 views
0

J'ai configuré un serveur Apache avec l'URL suivant: https://dev.mysite.com. Je suis en train de créer des sous-répertoires pour chaque projet que j'ai en développement. Par exemple, il peut s'agir de https://dev.mysite.com/project ou de https://dev.mysite.com/anotherproject. Certains des projets en développement utilisent le (s) framework (s) Laravel et Laravel Lumen.Apache héberge de nombreux projets laravel dans des sous-répertoires

Je n'utiliserai pas de fichier vhost pour chaque projet, car ils existeront dans les sous-répertoires. L'objectif est d'être en mesure de visiter https://dev.mysite.com/project/public/ et avoir l'application Laravel, ou Lumen, servie à l'utilisateur visitant le projet. Je suis d'accord pour que le client visite/public/pour voir leur projet. Cela n'arrive pas.

-Indexes a été défini sur le fichier virtualhost du serveur pour empêcher la liste des fichiers/répertoires dans le navigateur.

Lorsque je navigue vers {url}/project/public/heartbeat (par exemple), la route n'est pas servie (ou analysée) correctement. Quand je fais un die du $_SERVER['REQUEST_URI'] je reçois /project/public/heartbeat. La route heartbeat est configurée comme suit: $app->get('/heartbeat', '[email protected]');. La consultation de cette URL donne l'exception HTTP non trouvée typique du code Illuminate. Toutefois; quand j'ajoute project/public/ au début du chemin d'itinéraire (résultant en $app->get('/project/public/heartbeat'...) cela fonctionne. J'ai essayé d'ajouter les paramètres RewriteBase / et RewriteBase /project/public/ et RewriteBase /project/ au fichier .htaccess et aucun ne fonctionne. Je sais que le .htaccess est utilisé (je peux ajouter 'asdf' au fichier et le casser). Le module mod_rewrite est activé.

Voici les fichiers de configuration pour le vhost et le fichier project/public/.htaccess.

.htaccess:

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

RewriteEngine On 

# Redirect Trailing Slashes If Not A Folder... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# Handle Front Controller... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 
</IfModule> 

vhost:

<VirtualHost *:80> 
ServerName dev.mysite.com 

Redirect permanent/https://dev.mysite.com 
</VirtualHost> 

<VirtualHost *:443> 
ServerName dev.mysite.com 

DocumentRoot /var/www/public 

<Directory /var/www/public> 
    Options -Indexes +FollowSymLinks +MultiViews 
    AllowOverride All 
    Require all granted 
</Directory> 

LogLevel warn 

ErrorLog ${APACHE_LOG_DIR}/dev-error.log 
CustomLog ${APACHE_LOG_DIR}/dev-access.log combined 

ErrorDocument 403 https://dev.mysite.com 
</VirtualHost> 

S'il vous plaît laissez-moi savoir si vous avez besoin de plus amples informations. Encore une fois, l'objectif final est d'être en mesure de visiter https://dev.mysite.com/project/public/ et avoir l'application Laravel, Lumen, etc. servis à l'utilisateur visitant le projet.

Répondre

0

Setup your vhost comme suit:

<VirtualHost *:80> 
    DocumentRoot "/some/directory/mysite.dev" 
    ServerName mysite.dev 
</VirtualHost> 

Avis vous devez configurer un projet 'racine' initiale à /some/directory/mysite.dev. Cela ne doit pas être une application Laravel, tout ce qu'il doit avoir est un fichier .htaccess, et peut-être que vous pourriez vouloir un fichier index.html là-bas, donc quand vous visitez mysite.dev, vous pouvez au moins voir quelque chose. Ceci est facultatif cependant.

Dans le dossier /some/directory/mysite.dev, créez un fichier .htaccess et ajoutez ce qui suit:

<IfModule mod_rewrite.c> 

    RewriteEngine On 

    # We need this to stop the rewrite rule looping as the URI 
    # and directory both start with 'SubProject' 
    RewriteCond %{REQUEST_URI} !^/SubProject/ 

    # direct all requests that start with SubProject 
    RewriteRule^SubProject/?(.*)/?$ /SubProject/public/index.php [L] 

</IfModule> 

Lorsque vous visitez mysite.dev/SubProject le fichier index.php de ce projet devrait être chargé.