ਜੇਕਿਲ, ਹਿਊਗੋ, ਜਾਂ ਪੈਲੀਕਨ ਵਰਗੇ ਸਥਿਰ ਸਾਈਟ ਜਨਰੇਟਰ ਨਾਲ ਤਿਆਰ ਇੱਕ ਸਥਿਰ ਵੈਬਸਾਈਟ ਦੀ ਮੇਜ਼ਬਾਨੀ ਕਰਨ ਦੇ ਕਈ ਸਸਤੇ ਤਰੀਕੇ ਹਨ: ਇਹ ਸਾਰਾ ਬਲੌਗ ਸਥਿਰ ਤੌਰ 'ਤੇ ਜੇਕਿਲ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਤਿਆਰ ਕੀਤਾ ਗਿਆ ਹੈ। ਹਾਲਾਂਕਿ, ਮੈਂ ਉਪਰੋਕਤ ਕਿਸੇ ਵੀ ਵਿਕਲਪ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ ਹਾਂ, ਕਿਉਂਕਿ, ਇਸ ਬਲੌਗ ਦੇ ਜੀਵਨ ਕਾਲ ਵਿੱਚ, ਮੈਂ ਡੋਮੇਨ ਨਾਮ ਬਦਲੇ ਹਨ, URL ਸਕੀਮਾਂ ਬਦਲੀਆਂ ਹਨ, ਅਤੇ ਪੋਸਟਾਂ ਦਾ ਨਾਮ ਬਦਲਿਆ ਹੈ, ਅਤੇ ਮੈਂ ਚਾਹੁੰਦਾ ਹਾਂ ਕਿ ਸਾਰੇ ਪੁਰਾਣੇ URL ਨੂੰ ਜਿਉਂਦਾ ਰੱਖੋ ਮੈਂ ਇਸ ਬਲੌਗ ਨੂੰ ਅਪਾਚੇ ਅਤੇ, ਹਾਲ ਹੀ ਵਿੱਚ, ਇੱਕ ਸਿੰਗਲ ਵਰਚੁਅਲ ਮਸ਼ੀਨ 'ਤੇ nginx ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਹੋਸਟ ਕਰ ਰਿਹਾ ਹਾਂ, ਅਤੇ ਸਾਫਟਵੇਅਰ ਦੇ ਕਿਸੇ ਵੀ ਹਿੱਸੇ ਦੀਆਂ ਰੀਡਾਇਰੈਕਸ਼ਨ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਬਿਲਕੁਲ ਠੀਕ ਕੰਮ ਕਰਦੀਆਂ ਹਨ, ਪਰ ਮੈਂ ਇਸਨੂੰ ਨਵੀਂ ਅਤੇ ਵੱਖਰੀ ਥਾਂ 'ਤੇ ਹੋਸਟ ਕਰਨ ਲਈ ਤਿਆਰ ਸੀ। ਇੱਕ ਪਿਛਲੀ ਪੋਸਟ ਦੱਸਦੀ ਹੈ ਕਿ ਕਿਵੇਂ ਮੈਂ Google ਐਪ ਇੰਜਣ ਅਤੇ ਪਾਈਥਨ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਇੱਕ ਪੁਰਾਣੇ ਡੋਮੇਨ ਤੋਂ ਇੱਕ ਨਵੇਂ ਡੋਮੇਨ ਵਿੱਚ URL ਨੂੰ ਰੀਡਾਇਰੈਕਟ ਕਰਦਾ ਹਾਂ, ਪਰ ਹੁਣ ਮੈਨੂੰ ਸਥਿਰ ਸਮੱਗਰੀ ਦੀ ਸੇਵਾ ਕਰਨ ਲਈ ਇੱਕ ਤਰੀਕੇ ਦੀ ਲੋੜ ਹੈ। **ਅਤੇ** ਇੱਕੋ ਡੋਮੇਨ ਤੋਂ URL ਨੂੰ ਰੀਡਾਇਰੈਕਟ ਕਰੋ। ਉਹੀ ਡੋਮੇਨ ਰੀਡਾਇਰੈਕਸ਼ਨ ਲੋੜ ਇਸ ਲਈ ਹੈ ਕਿ ਮੈਂ ਸਿਰਫ਼ Google ਐਪ ਇੰਜਣ ਦੀ ਸਥਿਰ ਸਮੱਗਰੀ ਵਿਸ਼ੇਸ਼ਤਾ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਸਕਦਾ (ਉਪਰੋਕਤ ਸੂਚੀ ਵਿੱਚ ਲਿੰਕ ਕੀਤਾ ਗਿਆ)। ਹਾਲਾਂਕਿ, ਮੈਂ ਸਥਿਰ ਸਮੱਗਰੀ **ਅਤੇ** ਇੱਕੋ ਡੋਮੇਨ ਰੀਡਾਇਰੈਕਟਸ ਦੋਵਾਂ ਦੀ ਸੇਵਾ ਕਰਨ ਲਈ ਇੱਕ ਸਧਾਰਨ ਗੋਲੰਗ ਐਪਲੀਕੇਸ਼ਨ ਦੇ ਨਾਲ Google ਐਪ ਇੰਜਣ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦਾ ਹਾਂ ## ਗੂਗਲ ਐਪ ਇੰਜਣ ਕਿਉਂ? ਇਸ ਤੋਂ ਪਹਿਲਾਂ ਕਿ ਤੁਸੀਂ ਬਾਕੀ ਦੀ ਪੋਸਟ ਵਿੱਚ ਡੁਬਕੀ ਕਰੋ, ਸ਼ਾਇਦ ਤੁਸੀਂ ਸੋਚ ਰਹੇ ਹੋਵੋਗੇ, ਗੂਗਲ ਐਪ ਇੰਜਨ 'ਤੇ ਬਲੌਗ ਦੀ ਮੇਜ਼ਬਾਨੀ ਕਿਉਂ ਕੀਤੀ ਜਾਵੇ? ਇੱਥੇ ਮੇਰੇ ਕਾਰਨ ਹਨ: - ਜੇਕਰ ਤੁਹਾਡਾ ਟ੍ਰੈਫਿਕ ਐਪ ਇੰਜਣ ਦੇ 28 ਇੰਸਟੈਂਸ ਘੰਟਿਆਂ ਦੇ ਮੁਫਤ ਟੀਅਰ ਅਤੇ ਪ੍ਰਤੀ ਦਿਨ 1 GB ਨਿਕਾਸੀ ਟ੍ਰੈਫਿਕ ਦੇ ਅੰਦਰ ਫਿੱਟ ਬੈਠਦਾ ਹੈ, ਤਾਂ ਬਲੌਗ ਦੀ ਮੇਜ਼ਬਾਨੀ ਅਮਲੀ ਤੌਰ 'ਤੇ ਮੁਫਤ ਹੈ। - ਅੱਪਡੇਟਾਂ ਨੂੰ ਪੁਸ਼ ਕਰਨਾ ਇੱਕ ਕਮਾਂਡ ਨਾਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ - ਸਟੈਕਡ੍ਰਾਈਵਰ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲੌਗਿੰਗ ਅਤੇ ਨਿਗਰਾਨੀ ਨੂੰ ਏਕੀਕ੍ਰਿਤ ਕੀਤਾ ਗਿਆ ਹੈ - ਟ੍ਰੈਫਿਕ ਪੈਟਰਨਾਂ ਦੇ ਆਧਾਰ 'ਤੇ ਆਟੋਮੈਟਿਕ ਅੱਪ ਅਤੇ ਡਾਊਨ ਸਕੇਲਿੰਗ - ਕੁਝ ਕਲਿੱਕਾਂ ਨਾਲ, ਵੈੱਬ ਲੌਗਸ ਨੂੰ ਲੰਬੇ ਸਮੇਂ ਦੀ ਸਟੋਰੇਜ ਅਤੇ ਐਡਹਾਕ ਵਿਸ਼ਲੇਸ਼ਣ ਲਈ BigQuery ਵਰਗੀ ਕਿਸੇ ਚੀਜ਼ 'ਤੇ ਆਸਾਨੀ ਨਾਲ ਧੱਕਿਆ ਜਾ ਸਕਦਾ ਹੈ। - LetâÃÂÃÂs ਇਨਕ੍ਰਿਪਟ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਪ੍ਰਬੰਧਿਤ SSL ਸਰਟੀਫਿਕੇਟ ## ਸ਼ਰਤਾਂ ਇਹ ਪੋਸਟ ਹੇਠ ਲਿਖਿਆਂ ਨੂੰ ਮੰਨਦੀ ਹੈ: - ਤੁਸੀਂ Google ਕਲਾਉਡ ਪਲੇਟਫਾਰਮ (GCP) ਤੋਂ ਜਾਣੂ ਹੋ ਅਤੇ ਪਹਿਲਾਂ ਹੀ ਇੱਕ GCP ਪ੍ਰੋਜੈਕਟ ਬਣਾ ਚੁੱਕੇ ਹੋ - ਤੁਸੀਂ ਗੂਗਲ ਕਲਾਉਡ SDK ਨੂੰ ਸਥਾਪਿਤ ਕੀਤਾ ਹੈ - ਤੁਸੀਂ ਪ੍ਰਮਾਣਿਤ ਕੀਤਾ ਹੈ gcloudcommand ਤੁਹਾਡੇ Google ਖਾਤੇ ਦੇ ਵਿਰੁੱਧ ਇੱਕ GCP ਪ੍ਰੋਜੈਕਟ ਬਣਾਓ ਜੇਕਰ ਤੁਸੀਂ ਅਜੇ ਤੱਕ ਏ **GCP ਪ੍ਰੋਜੈਕਟ ਇਹਨਾਂ ਪੜਾਵਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ: - ਇੱਕ ਵੈੱਬ ਬ੍ਰਾਊਜ਼ਰ ਖੋਲ੍ਹੋ, ਅਤੇ ਇੱਕ Google ਖਾਤਾ ਬਣਾਓ ਜਾਂ ਲੌਗ ਇਨ ਕਰੋ - GCP ਕੰਸੋਲ 'ਤੇ ਨੈਵੀਗੇਟ ਕਰੋ - ਜੇਕਰ ਇਹ ਤੁਹਾਡਾ ਪਹਿਲਾ GCP ਪ੍ਰੋਜੈਕਟ ਹੈ, ਤਾਂ ਤੁਹਾਨੂੰ ਇੱਕ GCP ਪ੍ਰੋਜੈਕਟ ਬਣਾਉਣ ਲਈ ਕਿਹਾ ਜਾਵੇਗਾ। ਹਰੇਕ Google ਖਾਤੇ ਨੂੰ GCP ਲਈ 12 ਮਹੀਨਿਆਂ ਦੇ ਅੰਦਰ ਵਰਤਣ ਲਈ $300 ਦਾ ਕ੍ਰੈਡਿਟ ਮਿਲਦਾ ਹੈ। ਤੁਹਾਨੂੰ ਇੱਕ GCP ਪ੍ਰੋਜੈਕਟ ਬਣਾਉਣ ਲਈ ਇੱਕ ਕ੍ਰੈਡਿਟ ਕਾਰਡ ਦਾਖਲ ਕਰਨ ਦੀ ਲੋੜ ਹੈ, ਪਰ ਜਦੋਂ ਤੱਕ $300 ਦੇ ਕ੍ਰੈਡਿਟ ਦੀ ਖਪਤ ਨਹੀਂ ਹੋ ਜਾਂਦੀ ਜਾਂ 12 ਮਹੀਨਿਆਂ ਦੀ ਮਿਆਦ ਖਤਮ ਨਹੀਂ ਹੁੰਦੀ ਉਦੋਂ ਤੱਕ ਇਹ ਚਾਰਜ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ - ਜੇਕਰ ਇਹ ਇੱਕ ਨਵਾਂ GCP ਪ੍ਰੋਜੈਕਟ ਹੈ, ਤਾਂ ਤੁਹਾਨੂੰ GCP ਕੰਸੋਲ ਦੇ ਕੰਪਿਊਟ ਇੰਜਣ ਸੈਕਸ਼ਨ 'ਤੇ ਨੈਵੀਗੇਟ ਕਰਕੇ ਕੰਪਿਊਟ ਇੰਜਣ API ਨੂੰ ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੋਵੇਗੀ ਅਤੇ ਸ਼ੁਰੂਆਤੀ ਮੁਕੰਮਲ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰਨੀ ਪਵੇਗੀ। Google Cloud SDK ਨੂੰ ਸਥਾਪਿਤ ਕਰੋ ਜੇਕਰ ਤੁਸੀਂ ਅਜੇ ਤੱਕ ਇੰਸਟਾਲ ਨਹੀਂ ਕੀਤਾ ਹੈ **Google ਕਲਾਊਡ SDK ਇੱਥੇ ਦਿੱਤੀਆਂ ਹਿਦਾਇਤਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ gcloud ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰੋ ਇੱਕ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ GCP ਪ੍ਰੋਜੈਕਟ ਬਣਾ ਲਿਆ ਹੈ ਅਤੇ Google ਕਲਾਉਡ SDK ਨੂੰ ਸਥਾਪਿਤ ਕਰ ਲਿਆ ਹੈ, ਤਾਂ ਆਖਰੀ ਪੜਾਅ ਪ੍ਰਮਾਣਿਤ ਕਰਨਾ ਹੈ gcloud ਤੁਹਾਡੇ Google ਖਾਤੇ ਲਈ ਕਮਾਂਡ. ਆਪਣੀ ਟਰਮੀਨਲ ਐਪਲੀਕੇਸ਼ਨ ਖੋਲ੍ਹੋ ਅਤੇ ਹੇਠ ਦਿੱਤੀ ਕਮਾਂਡ ਚਲਾਓ: gcloud auth ਲਾਗਇਨ ਤੁਹਾਡੇ ਵੈਬ ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਇੱਕ ਵੈੱਬ ਪੇਜ ਖੁੱਲ੍ਹੇਗਾ। ਆਪਣਾ Google ਖਾਤਾ ਚੁਣੋ ਅਤੇ ਇਸਨੂੰ GCP ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ। ਇੱਕ ਵਾਰ ਪੂਰਾ ਹੋਣ 'ਤੇ, ਤੁਹਾਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕੀਤਾ ਜਾਵੇਗਾ ਅਤੇ ਅੱਗੇ ਵਧਣ ਲਈ ਤਿਆਰ ਹੋ ਜਾਵੇਗਾ ## ਇੱਕ ਡਾਇਰੈਕਟਰੀ ਬਣਾਓ ਅੱਗੇ, ਆਪਣੀ Google ਐਪ ਇੰਜਨ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਸਟੋਰ ਕਰਨ ਲਈ ਆਪਣੇ ਵਰਕਸਟੇਸ਼ਨ 'ਤੇ ਕਿਤੇ ਇੱਕ ਡਾਇਰੈਕਟਰੀ ਬਣਾਓ: mkdir ~/Sites/example.com/app_engine ਉਸ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਬਦਲੋ: cd ~/Sites/example.com/app_engine ਇਸ ਪੋਸਟ ਦਾ ਬਾਕੀ ਹਿੱਸਾ ਇਹ ਮੰਨ ਲਵੇਗਾ ਕਿ ਤੁਸੀਂ ਇਸ ਡਾਇਰੈਕਟਰੀ ਦੇ ਅੰਦਰ ਕੰਮ ਕਰ ਰਹੇ ਹੋ ਇਸ ਤੋਂ ਇਲਾਵਾ, ਦੇ ਅੰਦਰ ਇੱਕ ਡਾਇਰੈਕਟਰੀ ਬਣਾਓ **ਐਪ_ਇੰਜੀਨ** ਡਾਇਰੈਕਟਰੀ ਜਿਸ ਨੂੰ **ਸਟੈਟਿਕ ਕਹਿੰਦੇ ਹਨ mkdir ~/Sites/example.com/app_engine/static ਤੁਸੀਂ ਬਾਅਦ ਵਿੱਚ ਇਸ ਡਾਇਰੈਕਟਰੀ 'ਤੇ ਦੁਬਾਰਾ ਜਾਉਗੇ ## app.yaml ਬਣਾਓ ਗੂਗਲ ਐਪ ਇੰਜਣ ਨੂੰ ਆਮ ਤੌਰ 'ਤੇ ਦੋ ਫਾਈਲਾਂ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ: **app.yaml** ਅਤੇ Python, Golang, Java, ਜਾਂ PHP ਵਿੱਚ ਲਿਖੀ ਇੱਕ **ਐਪਲੀਕੇਸ਼ਨ ਫਾਈਲ** - ਇਸ ਸਥਿਤੀ ਵਿੱਚ ਇਹ Golang ਹੋਣ ਜਾ ਰਿਹਾ ਹੈ। **app.yaml** ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਚਲਾਉਣ ਲਈ ਲੋੜੀਂਦੀ ਸੰਰਚਨਾ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਇੱਥੇ ਬਹੁਤ ਸਾਰੇ ਵੱਖ-ਵੱਖ ਮਾਪਦੰਡ ਹਨ ਜੋ **app.yaml ਵਿੱਚ ਮੌਜੂਦ ਹੋ ਸਕਦੇ ਹਨ। ਉਹ ਪੈਰਾਮੀਟਰ ਵਰਤੀ ਗਈ ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾ ਦੇ ਆਧਾਰ 'ਤੇ ਵੱਖ-ਵੱਖ ਹੋ ਸਕਦੇ ਹਨ। ਇਸ ਪੋਸਟ ਲਈ, ਗੋਲੰਗ ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਜਾਵੇਗੀ, ਅਤੇ ਤੁਸੀਂ ਇੱਥੇ ਸਾਰੇ ਉਪਲਬਧ ਗੋਲੰਗ ਪੈਰਾਮੀਟਰ ਲੱਭ ਸਕਦੇ ਹੋ ਫਾਈਲ ਬਣਾਓ **app.yaml** ਹੇਠਾਂ ਦਿੱਤੀ ਸਮੱਗਰੀ ਦੇ ਨਾਲ: ਰਨਟਾਈਮ: go api_version: go1 ਹੈਂਡਲਰ: - url:script: _go_app ਸੁਰੱਖਿਅਤ: ਹਮੇਸ਼ਾ ਰੀਡਾਇਰੈਕਟ_http_response_code: 301 ਧਿਆਨ ਦਿਓ ਕਿ **ਸੁਰੱਖਿਅਤ: ਹਮੇਸ਼ਾ** ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੈ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਗੋਲੰਗ ਐਪਲੀਕੇਸ਼ਨ ਹਮੇਸ਼ਾ HTTPS 'ਤੇ ਸੇਵਾ ਕੀਤੀ ਜਾਵੇਗੀ। ਜੇਕਰ ਇੱਕ ਅੰਤਮ ਉਪਭੋਗਤਾ HTTP ਦੁਆਰਾ ਵੈਬ ਐਪਲੀਕੇਸ਼ਨ ਤੇ ਨੈਵੀਗੇਟ ਕਰਦਾ ਹੈ, ਤਾਂ ਉਹਨਾਂ ਨੂੰ ਮੂਲ ਰੂਪ ਵਿੱਚ 302 HTTPS ਸੰਸਕਰਣ ਤੇ ਰੀਡਾਇਰੈਕਟ ਕੀਤਾ ਜਾਵੇਗਾ। ਇਸ ਲਈ **redirect_http_response_code: 301** ਵੀ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੈ। ਮੈਂ ਹਮੇਸ਼ਾਂ ਚਾਹੁੰਦਾ ਹਾਂ ਕਿ ਵੈਬ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ HTTPS 'ਤੇ ਸੇਵਾ ਦਿੱਤੀ ਜਾਵੇ, ਅਤੇ ਮੈਂ ਨਹੀਂ ਚਾਹੁੰਦਾ ਕਿ ਖੋਜ ਇੰਜਣ HTTP ਤੋਂ HTTPS ਤੱਕ ਰੀਡਾਇਰੈਕਟ ਨੂੰ ਅਸਥਾਈ ਰੀਡਾਇਰੈਕਟ ਵਜੋਂ ਵਿਆਖਿਆ ਕਰਨ; ਇਹ ਇੱਕ ਸਥਾਈ ਰੀਡਾਇਰੈਕਟ ਹੈ ਜੇਕਰ ਤੁਹਾਡੇ ਕੋਲ ਸਥਿਰ ਸੰਪਤੀਆਂ ਹਨ, ਅਤੇ ਤੁਸੀਂ ਸ਼ਾਇਦ ਕਰਦੇ ਹੋ, ਤਾਂ ਐਪ ਇੰਜਣ ਨੂੰ ਇਸ ਬਾਰੇ ਸੂਚਿਤ ਕਰਨਾ ਸਭ ਤੋਂ ਵਧੀਆ ਅਭਿਆਸ ਹੈ ਅਤੇ ਇਸਨੂੰ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਬਜਾਏ ਆਬਜੈਕਟ ਸਟੋਰੇਜ ਤੋਂ ਉਹਨਾਂ ਸੰਪਤੀਆਂ ਦੀ ਸੇਵਾ ਕਰਨ ਦਿਓ। ਅਜਿਹਾ ਕਰਨਾ ਆਸਾਨ ਹੈ ਅਤੇ ਰਾਹੀਂ ਵੀ ਕੀਤਾ ਜਾਂਦਾ ਹੈ **app.yaml** ਫ਼ਾਈਲ ਉਦਾਹਰਨ ਲਈ, ਜੇਕਰ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਫੈਵੀਕੋਨ ਫਾਈਲ, ਇੱਕ CSS ਡਾਇਰੈਕਟਰੀ, ਇੱਕ Javascript ਡਾਇਰੈਕਟਰੀ, ਅਤੇ ਇੱਕ ਚਿੱਤਰ ਡਾਇਰੈਕਟਰੀ ਹੈ, ਤਾਂ ਹੇਠਾਂ ਦਿੱਤੀ ਵਰਤੋਂ ਕਰੋ **app.yaml** ਫਾਈਲ: ਰਨਟਾਈਮ: ਜਾਓ api_version: go1 ਹੈਂਡਲਰ: - url: /favicon.png$ static_files: static/favicon.png ਅੱਪਲੋਡ: static/favicon.png - url: /css static_dir: static/css - url: /js static_dir: static_dir - url: /images static_dir: static/images - url:script: _go_app ਸੁਰੱਖਿਅਤ: ਹਮੇਸ਼ਾ ਰੀਡਾਇਰੈਕਟ_http_response_code: 301 ## main.go ਬਣਾਓ ਅੱਗੇ, ਤੁਹਾਨੂੰ ਗੋਲੰਗ ਐਪਲੀਕੇਸ਼ਨ ਫਾਈਲ ਦੀ ਲੋੜ ਹੈ ਤੁਹਾਡੀਆਂ ਜ਼ਰੂਰਤਾਂ ਨੂੰ ਪੂਰਾ ਕਰਨ ਲਈ ਹੇਠਾਂ ਦਿੱਤੇ ਕੋਡ ਲਈ, ਫਾਈਲ ਬਣਾਓ **main.go ਹੇਠਾਂ ਦਿੱਤੇ ਕੋਡ ਨੂੰ ਕਾਪੀ ਅਤੇ ਪੇਸਟ ਕਰੋ, ਅਤੇ ਹੇਠ ਲਿਖੀਆਂ ਸੋਧਾਂ ਕਰੋ: - ਵਿੱਚ ਡੋਮੇਨ ਵੇਰੀਏਬਲ, ਸਹੀ HTTP ਪ੍ਰੋਟੋਕੋਲ ਨਾਲ ਆਪਣੇ ਡੋਮੇਨ ਨਾਮ ਨਾਲ ਮੇਲ ਕਰਨ ਲਈ ਮੁੱਲ ਬਦਲੋ - ਵਿੱਚ urlsmap, ਤੁਹਾਨੂੰ ਲੋੜੀਂਦੀ ਰੀਡਾਇਰੈਕਟਸ ਨਾਲ ਮੇਲ ਕਰਨ ਲਈ ਸਾਰੇ ਮੁੱਖ ਮੁੱਲ ਜੋੜਿਆਂ ਨੂੰ ਬਦਲੋ। ਹਰੇਕ ਕੁੰਜੀ ਨੂੰ ਮੌਜੂਦਾ ਡੋਮੇਨ ਦੇ ਪੁਰਾਣੇ URL ਦੇ ਸਿਰਫ਼ ਪਾਥ ਹਿੱਸੇ (/example-post-1.html ਦੀ ਬਜਾਏ httpsexample.com/example-post-1.html) ਨਾਲ ਬਦਲੋ। ਜਿੰਦਾ ਰੱਖੋ ਫਿਰ ਹਰੇਕ ਮੁੱਲ ਨੂੰ ਮੌਜੂਦਾ ਡੋਮੇਨ ਦੇ ਨਵੇਂ URL ਦੇ ਪਾਥ ਹਿੱਸੇ ਨਾਲ ਬਦਲੋ ਜਿਸ 'ਤੇ ਤੁਸੀਂ ਰੀਡਾਇਰੈਕਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ। ਸਾਰੇ ਰੀਡਾਇਰੈਕਟਸ 301 ਰੀਡਾਇਰੈਕਟ ਹੋਣਗੇ। ਇਸ ਨੂੰ ਬਦਲ ਕੇ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ **301** ਹੇਠਾਂ ਦਿੱਤੇ ਕੋਡ ਵਿੱਚ ਇੱਕ ਵੱਖਰੇ HTTP ਰੀਡਾਇਰੈਕਟ ਸਥਿਤੀ ਕੋਡ ਜਿਵੇਂ ਕਿ **302** ਪੈਕੇਜ ਮੁੱਖ ਆਯਾਤ ( "net/http""os""strings") func init() { http.HandleFunc ਹੈਂਡਲਰ) } ਫੰਕ ਹੈਂਡਲਰ (w http.ResponseWriter, r *http.Request) {// ਸਹੀ (ਠੀਕ ਹੈ) ਜੇਕਰ ਬੇਨਤੀ ਮਾਰਗ urls ਨਕਸ਼ੇ ਵਿੱਚ ਹੈ ਜੇਕਰ ਮੁੱਲ, ਠੀਕ ਹੈ := urls[r.URL.Path]; ਠੀਕ { ਮੁੱਲ = ਡੋਮੇਨ + ਮੁੱਲ http.Redirect(w, r, value, 301) } else { ਮਾਰਗ := "static/"+ r.URL.Path // ਵਾਪਸੀ 403 ਜੇਕਰ HTTP ਬੇਨਤੀ ਇੱਕ ਡਾਇਰੈਕਟਰੀ ਲਈ ਹੈ ਜੋ ਮੌਜੂਦ ਹੈ ਅਤੇ ਕਰਦੀ ਹੈ ਇੱਕ index.html ਫਾਈਲ ਸ਼ਾਮਲ ਨਹੀਂ ਹੈ ਜੇਕਰ f, err := os.Stat(path); err == nil&& f.IsDir() { ਸੂਚਕਾਂਕ := ਸਟ੍ਰਿੰਗਸ. ਟ੍ਰਿਮਸਫਿਕਸ(ਪਾਥ,+ "/index.html"ਜੇਕਰ _, err := os.Open(index); err != nil { w.WriteHeader (403) w.Writebytehtml> 403 ਵਰਜਿਤ

403 Forbidden

return } } // Return custom 404 page if HTTP request is to a non-existent file if _, err := os.Stat(path); os.IsNotExist(err) { w.WriteHeader(404) http.ServeFile(w, r, "static/404.html") return // Withoutreturn, a "404 page not found" string will be displayed at the bottom of your custom 404 page } http.ServeFile(w, r, path) return } } var domain string = "httpsexample.com" var urls = map[string]string{ "/example-post-1.html": "/post/example-post-1.html", "/example-post-2.html": "/post/example-post-2.html", "/example-post-3.html": "/post/example-post-3.html", } ## Generate the Static Content With **app.yaml** and **main.go** saved, the last piece is to generate your static content and store it in the **static** directory you created earlier How you do this entirely depends on what static site generator you are using If you are using Jekyll, you can configure the **destination** parameter in Jekyll’s _ **config.yml** file to save your static content in any directory on your workstation. So, you could set the **destination** parameter to Sites/example.com/app_engine/static and, every time you run jekyll build, the static content will be saved in that directory ## Deploy to App Engine With **app.yaml **main.go and your static content generated, you are ready to deploy your Google App Engine application Assuming gcloud is already pointed at the Google Cloud Project you want to deploy to, verify with gcloud config list project, run the following command: gcloud app deploy The command will output the appspot URL your application will be deployed to and ask if you want to continue. Typically, the appspot URL is **httpsyour-project-id.appspot.com This is also a useful self-check to make sure you are not deploying your application to the wrong Google Cloud Project. If everything looks okay, type **Y** and **Enter** to deploy your application. Depending on how large your static content is, your application should be deployed within about one minute ## Setup DNS At this point, your application is deployed under URL **httpsyour-project-id.appspot.com Unless your website uses that as its domain name, you will probably want to setup a custom domain that uses your actual current domain name The App Engine section of the Google Cloud Console can be used to do this. Go here and follow the instructions to configure your custom domain Once that is complete and DNS has had time to propagate, you should be able to navigate in your web browser to one of your current domain’s old URLs, for example **httpsexample.com/example-post-1.html and have it redirect to your current domain’s new URLs, for example **httpsexample.com/post/example-post-1.html** ## Pushing Updates To push updates, make the necessary changes in your static site’s source directory, regenerate the static content, and redeploy to Google App Engine by changing into the Sites/example.com/app_engine** directory and running gcloud app deploy ## References - A Surprising Feature of Golang that Colored Me Impressed - How to check if a map contains a key in go? - Disable directory listing with http.FileServer - 3 Ways to Disable http.FileServer Directory Listings - Handling HTTP Request Errors in GO - HTTP and Error management in Go - please add ability to set custom 404 notFoundHandler for http.FileServer