AB型技術系 主に備忘録

ほぼプログラム関連の備忘録

Bottleのルーティング機能を試す

スターサーバーでBottleを使ったページを表示させることができました。

freelancer.hatenablog.jp

今回は動的ルーティングを試しました。

サンプルプログラム

index.py

#!/usr/bin/python3.6

from bottle import route, run, template

@route('/')
def index():
    return template("sample", name="テスト")

※
@route('/<name>')
def test(name):
    return template("sample", name=name)

run(server='cgi')

※ ルートディレクトリ/xxxにアクセスするとtest(name)が実行され、引数のnameにはxxxが設定される

sample.html

<html lang="ja">
    <head>
        <title>サンプル</title>
    </head>
    <body>
        {{ name }}
    </body>
</html>

これで/xxxにアクセスすると画面上にxxxが表示されるはずなのですが・・・

f:id:freelancer13:20210922003640p:plain
404エラー

404エラーになりました。

index.pyにアクセスできていないようですね。

下記のようにURLを変更すれば表示されるようになりました。

/index.py/xxx

f:id:freelancer13:20210922011842p:plain
/index.py/xxx

日本語も大丈夫

/index.py/テスト

f:id:freelancer13:20210922012639p:plain
/index.py/テスト

しかしできるならドキュメントルート+ "/xxx"でちゃんと表示されるようにしたいですね。
.htaccessに下記を追加してURLをリライトするようにします。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.py$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.py/%{REQUEST_URI} [L]
</IfModule>

/xxxにアクセスするとURLの表示内容は変わらないけど裏では /index.py/xxxにアクセスするようになります。

.htaccessを更新して/xxxにアクセスすると

f:id:freelancer13:20210922011842p:plain
/xxx

表示されました。

index.pyをコントローラにすれば動的なページの作成も簡単に実装できそうです。