qjelsvif
@qjelsvif

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

flaskによるwebサイトのurlにindex.cgiを入れないようにしたい

実装したいこと

urlにindex.cgiを入れないようにしたい

現在flaskでwebサイトを作成しています
cgiでpyを実行してサーバーに置いたところ動作はするのですが他のページに遷移したときに

(domein)/index.cgi/testpage

となります
これを

(domein)/testpage

としたいです

.htaccessでリダイレクト設定をいろいろ試しているのですがうまくいきません

該当するソースコード

.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On

    # HTTPSリダイレクト(オプション)
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    # /index.cgi/以下のパスを index.cgi にリダイレクト
    RewriteCond %{REQUEST_URI} ^/index.cgi/(.*)
    RewriteRule ^index.cgi/(.*)$ /index.cgi?$1 [L]
    
    # リクエストされたファイルが存在しない場合、index.cgiにリダイレクト
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.cgi?$1 [L]
</IfModule>



index.cgi

#! /home/~hoge~/python

from wsgiref.handlers import CGIHandler
from app import app

CGIHandler().run(app)

app.py

from flask import Flask, jsonify, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('home.html')

@app.route('/testpage')
def testpage():
    return jsonify({'message': 'This is a test page!'})

if __name__ == '__main__':
    app.run(debug=True)

0

2Answer

HTTPSリダイレクトは問題無さそうですが、その次のRewriteRuleらの
条件、^index.cgi/(.*)$^(.*)$が一緒なので二重の書き換えが発生しているのと

Substitutionindex.cgi?$1 とクエリを渡されてますから、@app.routeが効かないでしょう。
普通index.cgi/<path><query>な形式でないとルートとして認められないかと。

原因の切り分けとして、余計な追記をせず、以下を試してどうなるか確認なさってください。

.htaccess
DirectoryIndex index.cgi
Options +ExecCGI

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.cgi/$0 [L]

https://example.com/testpageとしてアクセスできるはずです。

しかしhttps://example.com/index.cgi/testpageにも引き続きアクセスできます。これは端的に申し上げると仕様なので諦めるかcgi側で何とかしてください。


あとdomeinではなくdomainです。

2Like

Comments

  1. This comment has been deleted for violation of our Terms of Service.
  2. @qjelsvif

    Questioner

    お二方回答ありがとうございます
    とても参考になります

    domeinではなくdomainでしたか笑
    にわか開発者がばれます...w

  3. @qjelsvif

    Questioner

    .htaccessを変更してみましたが
    index.cgi/testpage
    は表示されるものの
    /testpage
    は404エラーでした

  4. 404エラーでした

    であればドキュメントルートに/index.cgiが無い(パスが合ってない)ということになります。
    ディレクトリ構成はどうなっていますか?

    .htaccess, index.cgi, app.pyを置いた位置など詳細に書いてください。

    なお私が提示している.htaccessはドキュメントルートの最上位にある必要がありますが、それ以外はSubstitutionのパスさえ合わせていればサブディレクトリ(たとえば/flaskというディレクトリにcgiとpyがあるならSubstitutionのパスは/flask/index.cgi/$0となる)でも良いです。
    それかその3つのファイル共に最上位に合わせるかです。

    あとサーバーの情報など書かれてないのですが、必要そうな情報は質問元を編集して書いておいてください。

This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌