web-dev-qa-db-fra.com

La redirection d'adresse IP fonctionne, mais la redirection de domaine ne fonctionne pas.

Similaire au problème trouvé ici . Lancer debian, Apache2, essayer de rediriger example.org.com vers example.org.com/aplication/calculator. J'ai activé mod_rewrite, c'est pourquoi la redirection IP fonctionne.

Cependant, si je mets des conditions différentes dans le fichier .htaccess situé dans mon répertoire /var/www/html et que je saisis l'adresse URL, la page https://example.org.com normale s'affiche. Le fichier .htaccess contient les éléments suivants:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_Host} ^123\.456\.789\.0$
RewriteRule ^(.*)$ https://example.org.com/ [R]
RewriteCond %{HTTP_Host} ^example\.org\.com$
RewriteRule ^(.*)$ https://example.org.com/aplication/calculator [R]

De la même manière que pour le problème que j'ai trouvé ici précédemment, j'ai essayé la commande apachectl -S et la sortie a l'apparence suivante:

VirtualHost configuration:
*:443                  example.org.com (/etc/Apache2/sites-enabled/000-default-le-ssl.conf:5)
*:80                   example.org.com (/etc/Apache2/sites-enabled/000-default.conf:1)
ServerRoot: "/etc/Apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/Apache2/error.log"
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/Apache2/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
PidFile: "/var/run/Apache2/Apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
Define: ENABLE_USR_LIB_CGI_BIN
User: name="www-data" id=33
Group: name="www-data" id=33

J'ai essayé de créer le fichier example.org.com.conf dans le dossier /etc/Apache2/sites-enabled, puis de le connecter avec un lien symbolique avec le fichier dans /etc/Apache2/sites-available de la même façon que le fichier 000-default.conf (ce qui, à ma connaissance, fait fonctionner la redirection IP ) et mettre dans AllowOverride all, mais cela ne semble toujours pas avoir d'effet. Merci pour la lecture.

EDIT: Bien que spécifié dans mon hôte virtuel (AllowOverride all), remplacé par all également dans /etc/Apache2/Apache.conf file pour le même dossier que suggéré - ici bien que non recommandé. Maintenant, il me redirige, mais me met sur une boucle de redirection.

1
NewToComputers

Cette règle de réécriture n'a aucun sens:

RewriteCond %{HTTP_Host} ^example\.org\.com$
RewriteRule ^(.*)$ https://example.org.com/aplication/calculator [R]

C'est ce qui cause vos boucles infinies. Si une demande arrive pour https://example.org.com/, elle sera redirigée vers https://example.org.com/aplication/calculator. Ensuite, le navigateur fera une demande pour cette URL qui correspond à la même règle et émet une auto-redirection.

Vous ne devriez pas avoir de règle qui redirige tout le contenu d'un domaine vers une seule page du même domaine. Il est préférable de renvoyer "404 non trouvé" pour les pages qui ne sont pas censées exister. Une solution consiste simplement à supprimer cette règle.

Une autre solution serait de changer la règle pour simplement rediriger la page d'accueil:

RewriteCond %{HTTP_Host} ^example\.org\.com$
RewriteRule ^/?$ https://example.org.com/aplication/calculator [R]

Au lieu d'utiliser des règles de réécriture, vous pouvez déplacer et renommer "application/calculator" en "index.html", qui le sert automatiquement à la racine de votre site.

Je ferai également remarquer que vous avez mal orthographié "application". Il devrait avoir deux "p".

3

Suite à la réponse de @ Stephen.

Bien que spécifié dans mon hôte virtuel (_AllowOverride all_), changé en all également dans le fichier _/etc/Apache2/Apache.conf_ pour le même dossier ...

Cela devrait être complètement inutile et implique peut-être que vous avez un conflit quelconque.

Vraiment, vous devriez avoir _AllowOverride None_ dans le conteneur parent approprié _<Directory>_ dans la configuration du serveur et une substitution _AllowOverride All_ (ou quelque chose de plus spécifique) dans chaque conteneur _<VirtualHost>_ pour le champ DocumentRoot spécifique. pour chaque site.

Maintenant, il me redirige, mais me met sur une boucle de redirection.

Oui, comme le dit @Stephen dans sa réponse.

Cependant, cela vous indique également que la "redirection IP" dans votre fichier _.htaccess_ ne faisait également rien pour commencer. Si vous voyiez une "redirection IP" (qui, selon vous, "fonctionnait"), alors autre chose devait le faire. (?)

_RewriteCond %{HTTP_Host} ^123\.456\.789\.0$
RewriteRule ^(.*)$ https://example.org.com/ [R]
_

En supposant que vous n'hébergiez pas de domaines commençant par un numéro, il est plus efficace (au niveau des expressions rationnelles) de rechercher simplement un chiffre au début de l'en-tête de l'hôte, au lieu de faire correspondre l'adresse IP complète. Par exemple:

_RewriteCond %{HTTP_Host} ^\d
RewriteRule (.*) https://example.org.com/$1 [R,L]
_

Vous devez également probablement rediriger vers le même chemin d’URL (notez le backreference _$1_). Cependant, étant donné que vous avez accès à la configuration du serveur, vous devez le faire directement dans la configuration du serveur et le piéger avec un conteneur séparé/default _<VirtualHost>_. Pas besoin de mod_rewrite ici. (Comme @closetnoc le suggère dans les commentaires.)

_RewriteCond %{HTTP_Host} ^example\.org\.com$
RewriteRule ^/?$ https://example.org.com/aplication/calculator [R]
_

Si vous n'hébergez pas plusieurs domaines sur le même vHost, la directive RewriteCond qui vérifie l'hôte semble être redondante.

1
MrWhite