1
votes

Comment rediriger en permanence toutes les pages d'un sous-domaine vers un sous-chemin du domaine www?

J'ai ce site Web par exemple:

J'héberge toujours cet ancien site mais je l'ai déplacé ici:

J'aimerais que chaque ancienne page pointe vers chaque nouvelle page. Une redirection permanente comme celle-ci:

https://www.neuraxle.neuraxio.com/* ==> https://www.neuraxio.com/en/neuraxle/*

Dois-je héberger un serveur pour que cela puisse écrire manuellement une application Python Flask qui redirige chaque URL avec une réécriture personnalisée? Je voudrais éviter de coder cela en utilisant DNS. Y a-t-il une astuce DNS que je peux utiliser? J'utilise GoDaddy pour gérer mon DNS.

Facultatif: s'il n'y a rien à faire avec DNS, pouvez-vous fournir un exemple de méthode de gestionnaire d'URL Flask? Existe-t-il un service d'hébergement gratuit disponible pour héberger cette application Flask?


0 commentaires

3 Réponses :


1
votes

Vous devriez pouvoir rediriger, en utilisant les fichiers RewriteEngine et .htaccess que vous devriez avoir dans votre racine Web ou accessible via votre panneau de contrôle d'hébergement, en utilisant des expressions régulières. Je ne suis pas sûr de la direction du mouvement en raison de votre formulation, donc juste au cas où, voici les deux directions avec quelques références.

Si vous souhaitez rediriger depuis sous-domaine dans le dossier (ce qui semble plus probable selon votre exemple), vous pouvez faire quelque chose comme ceci:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.neuraxio.com
RewriteRule ^en/neuraxle/(.*)$ http://www.neuraxle.sample.com/$1 [L,R=301]

Si vous souhaitez rediriger du dossier vers sous-domaine , vous pouvez faire quelque chose comme:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.neuraxle\.neuraxio.\com$
RewriteCond %{REQUEST_URI} !^/en/neuraxle
RewriteRule ^(.*)$ /en/neuraxle/$1 [L,NC]

Quelques références supplémentaires:

Modifier: dans un autre cas, cela dépend de l'option / plate-forme de déploiement que vous avez utilisée et que vous n'avez pas mentionnée dans votre question.

Et en fait, sur encore une autre pensée, GoDaddy permet en effet une redirection DNS. Aller à Gestionnaire de domaine -> DNS -> Gestion DNS Et près du bas de la page à droite, il y aura une section de transfert: entrez la description de l'image ici

Dans le SUBDOMAIN entrez: www.neuraxle et dans le FORWARD TO sélectionnez https: // code > et entrez www.neuraxio.com/en/neuraxle/ et cela devrait faire l'affaire. Je garderai les informations de mod_rewrite au cas où.


6 commentaires

Est-ce un serveur PHP avec cPanel? De quel type de serveur s'agit-il précisément?


mod_rewrite est disponible dans les serveurs Web ( Apache et nginx sont les plus courants) et si vous utilisez un hébergement partagé, l'accès à leur configuration peut être via un fichier .htaccess dans le public_html ou un dossier racine Web nommé similaire ou, via le panneau de contrôle de l'hébergement (dont cPanel est le plus commun). Si vous n'utilisez AUCUN serveur Web mais que vous servez directement depuis Flask, mod_rewrite peut toujours être une option flask.palletsprojects.com/en/1.1.x/deploying/cgi


Votre solution DNS ne fonctionne pas et semble avoir cassé le site. Essayez de visiter neuraxle.neuraxio.com par exemple.


Si par "ont interrompu le site", vous entendez le message du navigateur indiquant que la connexion n'est pas privée, vous devez corriger votre certificat SSL pour couvrir tous les sous-domaines - un certificat générique comme décrit ici, par exemple: ca.godaddy.com/help/what-is-a-wildcard-ssl-certificate -567 Sinon, le site fonctionne très bien pour moi lorsque je contourne l'avertissement de connexion non privée


Y aurait-il un moyen d'éviter d'acheter des certificats génériques tout du long?


Pour éviter les alertes de sécurité du navigateur, vous devez soit acheter un certificat générique, un certificat multidomaine ou deux certificats: serverfault.com/questions/566426/... , vous pouvez également arrêter d'utiliser SSL et passer à HTTP, enfin vous pouvez trouver une option gratuite (J'ai déjà utilisé StartSSL): geekflare.com/free-ssl-tls-certificate < / a>



0
votes

Cela devrait être utile.

Parfois, vous devez créer un site Web qui redirige simplement d'un domaine vers un autre. Par exemple, vous avez peut-être créé un site Web sur votre nom d'utilisateur.pythonanywhere.com, et il est devenu suffisamment populaire pour que vous ayez décidé de passer à un forfait payant et de l'héberger sur www.votredomaine.com - mais il existe de nombreux liens qui accédez à l'ancien domaine, et vous voulez qu'ils continuent à fonctionner.

La meilleure solution est d'avoir un site Web simple fonctionnant à yourusername.pythonanywhere.com qui, lorsqu'il reçoit une demande, redirige l'utilisateur vers le nouveau domaine - ainsi les demandes adressées à http://yourusername.pythonanywhere.com/something sont automatiquement redirigées vers http://www.yourdomain.com/something , etc.

Pour ce faire, vous devez disposer d'un site Web dans l'onglet "Web" pour les deux domaines; celui sur www.yourdomain.com est votre site principal, et celui sur yourusername.pythonanywhere.com est une simple application Flask utilisant Python 3.6, avec le code suivant dans le fichier flask_app.py:

from flask import Flask, redirect, request

app = Flask(__name__)

from urllib.parse import urlparse, urlunparse

FROM_DOMAIN = "yourusername.pythonanywhere.com"
TO_DOMAIN = "www.yourdomain.com"

@app.before_request
def redirect_to_new_domain():
    urlparts = urlparse(request.url)
    if urlparts.netloc == FROM_DOMAIN:
        urlparts_list = list(urlparts)
        urlparts_list[1] = TO_DOMAIN
        return redirect(urlunparse(urlparts_list), code=301)

OU ESSAYEZ LA MÉTHODE CI-DESSOUS

Comment rediriger vers un domaine externe dans Flask?


2 commentaires

Cela semble fonctionner. Cela fonctionnerait-il aussi pour une page profonde comme celle-ci: https://www.neuraxle.neuraxio.com/something/something.html rediriger vers https://www.neuraxio.com /en/neuraxle/something/something.htm‌ l


Ce n'est pas près de travailler. J'ai accepté la prime car c'était la date limite.



0
votes

Cette réponse valorisée et acceptée est médiocre:

@app.before_request
def redirect_to_new_domain():
    FROM_DOMAINS = ['0.0.0.0:' + str(PORT), 'https://www.neuraxio.com', 'www.neuraxio.com', "neuraxio.com"]
    SUBPATH = "/en/neuraxle"
    TO_DOMAIN = 'www.neuraxle.org'
    urlparts = urlparse(request.url)
    print(urlparts, urlparts.netloc)
    if urlparts.netloc in FROM_DOMAINS and SUBPATH in urlparts.path:
        parsed = urlparts
        parsed = parsed._replace(netloc=TO_DOMAIN)
        parsed = parsed._replace(path=urlparts.path.replace(SUBPATH, ""))
        return redirect(parsed.geturl(), code=301)

Remarque: ma propre réponse ici ne répond pas complètement à la question d'origine, mais au moins compile. Nous avions également besoin de cela comme je réponds maintenant, à l'exception du fait que nous avons également un sous-chemin à rediriger depuis au lieu de vers.


0 commentaires