独自ドメインへのリダイレクト

525 views
Skip to first unread message

donutsshop

unread,
Jul 25, 2010, 10:51:33 AM7/25/10
to Google-App-Engine-Japan
こんばんわ

gae上にホームページを設置したく、完成したものをデプロイするところまではうまくいったのですが、
アプリケーションを独自ドメインに割り当てており、
当然appspot.comのurlと独自ドメインのurl両方からアクセスできるわけですが、
seo上好ましくないと考え、appspot.comでアクセスした場合には独自ドメインのurlへリダイレクトさせるようにしたいと思っています

gaeも初心者で、pythonもほとんどわからずネットに頼りきりですが、なんとか以下のようにしてみました
リダイレクトはされているようですが、ページが表示されず、真っ白になります

以下がapp.ymlの中身

application: xxx
version: 1
runtime: python
api_version: 1

handlers:
- url: /
script: main.py
- url: /
static_files: htdocs/index.html
upload: /
- url: /
static_dir: htdocs

以下がmain.pyの中身

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util

class MainHandler(webapp.RequestHandler):
def get(self):
if self.request.url != 'http://xxx.yuifamily.com/':
self.redirect('http://xxx.yuifamily.com', permanent = True)

def main():
application = webapp.WSGIApplication([('/', MainHandler)],
debug=True)
util.run_wsgi_app(application)


if __name__ == '__main__':
main()

yuifamily.comが独自ドメインです)

なにがマズいんでしょうか?
困ってしまってます・・・どなたかご教示をお願いします。



谷村直樹

unread,
Jul 25, 2010, 2:44:27 PM7/25/10
to google-app-...@googlegroups.com
おはようございます。

パッと見で、

ここで指定したURLが

self.redirect('http://xxx.yuifamily.com', permanent = True)

結局、ここでマッチしない(末尾のスラッシュがない)

if self.request.url != 'http://xxx.yuifamily.com/':

ために、リダイレクトがループしているのではないでしょうか?

donutsshop

unread,
Jul 25, 2010, 6:48:12 PM7/25/10
to Google-App-Engine-Japan
ありがとうございます

いろいろ試してみてはいるんですが、スラッシュを付加して一致させてもしなくても真っ白になってしまうようです

うーん、なんなんでしょうねえ。

Masayoshi UKIDA

unread,
Jul 26, 2010, 12:02:57 AM7/26/10
to Google-App-Engine-Japan
リダイレクト後も、
MainHandler.get() へマッピングされているからではないでしょうか?

こちらが参考になるかと思います。
http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/staticfiles.html

donutsshop

unread,
Jul 26, 2010, 11:46:35 AM7/26/10
to Google-App-Engine-Japan
ありがとうございます!


> リダイレクト後も、
> MainHandler.get() へマッピングされているからではないでしょうか?

この部分はどこのことを指しているんでしょうか?
自分の書いたコードもにわか知識のため、ぼやっとしか見えていません。
それぞれの関数やクラスのがあって、どう呼ばれてというのはなんとなわかっているつもりなんですが。
リダイレクト後にMainHandler.get()・・・はなんのことやら。

すみません!アドバイスをお願いします

谷村直樹

unread,
Jul 26, 2010, 4:10:46 PM7/26/10
to google-app-...@googlegroups.com
いくつか考えないといけなさそうですが、
真っ白になるのは、main.pyについて、

>>>>> class MainHandler(webapp.RequestHandler):
>>>>> def get(self):
>>>>> if self.request.url != 'http://xxx.yuifamily.com/':
>>>>> self.redirect('http://xxx.yuifamily.com', permanent = True)

で、正しくドメインが指定されていた場合に何もレスポンスを
返さないでget()が終了しているためかと思います。

class MainHandler(webapp.RequestHandler):
def get(self):
if self.request.url != 'http://xxx.yuifamily.com/':
self.redirect('http://xxx.yuifamily.com', permanent = True)

else:
self.response.out.write("<html><body>TEST</body></html>")

というような感じで、リダイレクトしないケースのレスポンスを確認してみては
いかがでしょうか?

あとはapp.ymlについて、UKIDAさんがおっしゃっているように
/のリクエストがすべてmain.pyでハンドリングされているようですので
それも含めてどう対処するか考えないといけないのかなと思います。

donutsshop

unread,
Jul 26, 2010, 6:19:49 PM7/26/10
to Google-App-Engine-Japan
なるほど。

試してみますね!
まずはお礼まで、ありがとうございます!!

donutsshop

unread,
Jul 26, 2010, 9:21:28 PM7/26/10
to Google-App-Engine-Japan
ためしてみました

お示しいただいたように
elseでテストページを表示させるようにしてみましたが、appspot.comでアクセスすると独自ドメインへのリダイレクト後、テストページが表
示され、独自ドメインへアクセスするとそのままテストページが表示されるような状況です

app.ymlの

>>> - url: /
>>> script: main.py

を削除してデプロイすれば、リダイレクトはしないもののサイトの表示はするので、リダイレクトさせた場合のコードでは

>>> - url: /
>>>  static_files: htdocs/index.html
>>>  upload: /
>>> - url: /
>>>  static_dir: htdocs

が認識されていないような印象をもっているんですが(的外れ?)、そうではなくてmain.pyのリダイレクトのelse節以下に処理を加えないといけ
ないということなんでしょうか?

よろしくおねがいします。。

谷村直樹

unread,
Jul 27, 2010, 3:54:00 PM7/27/10
to google-app-...@googlegroups.com
思い付きですが、とりあえず2通りやり方があるかなと思います。

おっしゃっているとおり、main.pyのelseで処理を加える必要はあると思います。

1つ目のやり方は、htdosc配下のファイルをテンプレートと考え、読み込んで表示するという方法です。

↓テンプレートの使用について
http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/templates.html

もう1つは、リダイレクトの際に指定しているURLを'http://xxx.yuifamily.com/index.html'にして
あげれば、とりあえず、'http://xxx.appspot.com/'でアクセスしたものは最初にリダイレクトする
ことができると思います。但し、'http://xxx.appspot.com/'以外、
例えば、直接'http://xxx.appspot.com/index.html'にアクセスしたものは
あきらめる必要がありますが。こっちのほうが簡単かと思います。

donutsshop

unread,
Jul 28, 2010, 9:46:53 AM7/28/10
to Google-App-Engine-Japan
谷村さん、ありがとうございます!

2番目の方法でいくことにしました
直接'http://xxx.appspot.com/index.html'にアクセスした場合などのケースはあきらめます

数日前にyahoo!Japanがgoogleの検索エンジン採用を決めたというニュースがあり、
将来それが実現となればクロスドメインでの rel="canonical" タグがこれまでサポートされていなかったyahooでも利用できることに
なりそうで、リダイレクトしなくてもよくなりそうな気配
これも朗報でした。

ほんとにたびたびありがとうございました。



On 7月28日, 午前4:54, 谷村直樹 <naoki.tanim...@gmail.com> wrote:
> 思い付きですが、とりあえず2通りやり方があるかなと思います。
>
> おっしゃっているとおり、main.pyのelseで処理を加える必要はあると思います。
>
> 1つ目のやり方は、htdosc配下のファイルをテンプレートと考え、読み込んで表示するという方法です。
>
> ↓テンプレートの使用についてhttp://code.google.com/intl/ja/appengine/docs/python/gettingstarted/t...
Reply all
Reply to author
Forward
0 new messages