Je souhaite déployer une application Angular 2 sur un serveur Apache. J'ai lu divers guides comme ceci et ceci mais aucun d'entre eux ne fonctionne. J'ai installé npm
et ng
sur le serveur.
En bref, voici ce que j'ai fait:
npm install
.ng build --prod
et créer un répertoire dist
.Apache
root en répertoire /var/www/html/dist
.mod_rewrite
, redémarré Apache
et ajouté ce .htaccess
dans mon répertoire dist
.<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
Mais seule ma page d'accueil domain.com
fonctionne, d'autres pages telles que domain.com/login
, domain.com/register
etc. émettent une erreur 404. Même domain.com/index.html/login
ne fonctionne pas.
L'application fonctionne correctement sur mon système local où je la développe à l'aide de ng serve
. Qu'est-ce que je rate?
Il semble que cela manquait dans mon fichier /etc/Apache2/sites-enabled/000-default.conf
. Après avoir ajouté ceci et redémarré Apache
, le site Web fonctionne correctement.
<Directory "/var/www/html/dist">
AllowOverride All
</Directory>
Créez le fichier .htaccess
dans le dossier racine et collez-le dans .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
Pour Apache, pour rediriger n'importe quelle demande vers index.html, vous avez besoin d'un fichier .htaccess à la racine . Créez simplement un .htaccess dans votre dossier dist (au même niveau que index.html), je suppose que c'est la racine publique de votre application et collez-la dans le fichier .htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# not rewrite css, js and images
RewriteCond %{REQUEST_URI} !\.(?:css|js|map|jpe?g|gif|png)$ [NC]
RewriteRule ^(.*)$ /index.html?path=$1 [NC,L,QSA]
Maintenant, quel que soit le chemin que vous demandez, Apache servira toujours votre fichier index.html, à l'exception des demandes concernant les fichiers existants (RewriteCond% {REQUEST_FILENAME}! -F) et des demandes concernant css, js, etc. (RewriteCond% {REQUEST_URI }!. (?: css | js | map | jpe? g | gif | png) $) - ce qui devait être exclu, car vous voulez vraiment ceux-ci . De plus, l'extension mod_rewrite d'Apache doit être activée pour cela travailler. Le plus souvent, il est activé. Si non, demandez à votre fournisseur d'hébergement
1) Changer la balise de base dans le fichier index.html
<base href="./">
2) Projet de construction:
ng build --prod --base-href /myproject/
3) Ajoutez vos fichiers dist dans "/ usr/local/Apache2/htdocs/myproject /"
4) Sur Apache Server 2.4 (httpd) Dans le fichier: /usr/local/Apache2/conf/httpd.conf, configurez "FallbackResource".
<Directory "/usr/local/Apache2/htdocs">
...
FallbackResource /myproject/index.html
</Directory>
fichier complet "/usr/local/Apache2/conf/httpd.conf":
ServerRoot "/usr/local/Apache2"
Listen 80
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_Host_module modules/mod_authz_Host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
<IfModule !mpm_prefork_module>
#LoadModule cgid_module modules/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
#LoadModule cgi_module modules/mod_cgi.so
</IfModule>
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
<IfModule unixd_module>
User daemon
Group daemon
</IfModule>
ServerAdmin [email protected]
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/usr/local/Apache2/htdocs"
<Directory "/usr/local/Apache2/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
FallbackResource /myproject/index.html
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog /proc/self/fd/2
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog /proc/self/fd/1 common
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/usr/local/Apache2/cgi-bin/"
</IfModule>
<IfModule cgid_module>
</IfModule>
<Directory "/usr/local/Apache2/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule headers_module>
RequestHeader unset Proxy early
</IfModule>
<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
</IfModule>
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
Changer la balise de base dans le fichier index.html
<base href="./">
Créer une construction après ça
ng build --prod
Vous allez maintenant avoir un nouveau dossier dist, déployer le dossier dist maintenant. Ça devrait marcher.
Changer la balise de base dans le fichier index.html
Courir:
ng build --prod -bh "http://example.net"
ouvrez votre index.html dans le répertoire dist après
ng build --prod
et élément de base Chang au nom DNS de votre site, par exemple pour mon serveur Apache local J'ai changé de
<base href="/">
à
<base href="//localhost/angular2/ng2-cli/dist/">