2

したがって、共有ホストにcgitをインストールしました。私はそれをカスタム コンパイルし、シンボリック リンクを使用して更新されたビルドからビルドにリンクし、最新バージョンをテストしまし$HOME/mydomain-and-public-www-folder.tld/g$HOME/local/lib/cgit/prod$HOME/local/lib/cgit/${git describe}これには何が含まれますか?

[sharedhost]$ pwd
$HOME/local/lib/cgit/prod
[sharedhost]$ ls
.htaccess  cgit.cgi  cgit.css  cgit.png lib/

さて、ブラウザに入力すると、ランディング ページがすべて見栄えがよくなりhttps://mydomain.tld/g/、きれいな cgit インターフェイスが表示されます。任意のリンクをクリックすると、適切なリポジトリが表示されますが、すべての書式設定が失われています (CSS、PNG、および JS ファイルはさようなら、すべてのリンクはhttps://mydomain.tld/g/cgit.cgi/randomrepo.gitすべての URL のフォームになっています。もちろん、すべてのファイルブラウザは、必要な .htaccess ファイルhttps://mydomain.tld/g/cgit.cgi/cgit.cssの代わりに.htaccess ファイルを検索するため、製品パスの .htaccess ファイルは機能しません。https://mydomain.tld/g/cgit.css

[sharedhost]$ more .htaccess 
# GIT BEGIN ###########################################################

Options +Indexes +FollowSymLinks +ExecCGI 

Action fastcgi-script cgit.cgi

SetEnv HTTP_CGIT_CONFIG /home/username/local/lib/cgit/cgit-conf/cgitrc

RewriteEngine On
DirectoryIndex cgit.cgi

# GIT END ############################################################

# AUTHENTICATION BEGIN ###############################################
AuthType Digest
AuthName "cgitdigestdomain"
AuthDigestDomain /cgitdigestdomain/
AuthUserFile  /home/username/local/lib/cgit/cgit-conf/.htpasswd
Require valid-user
# AUTHENTICATION END  ################################################

私は、この [1] または [2] のように推奨される Rewrite パターンをたくさん試しました。私はより高度な .htaccess ルールに比較的慣れていないのでcgit.cgi、mod-rewrite使用して URL から削除し、同じディレクトリ内の css および png ファイルにアクセスでき QSA/クエリ文字列が適切に処理されるようにする方法を誰かが指摘できます。長い投稿で申し訳ありません。これについての明らかなハウツーが私にとってうまくいかなかった理由を、より詳細に説明すると思いました。

[1] .htaccess を含む URL から「index.php」を削除します

[2] htaccess は URL からサブディレクトリを削除します

更新

どちらの回答も良いようですが、仮想ルートとスキャン パスの機能を理解していないと思いますが、これらの回答は以前よりも進んでいるように見えますが、重要な部分がまだ欠けています。(はるかに削除されたパスにある) リポジトリへの URL が$HOME/data/scm/priv適切にリダイレクトされず、404 が表示されます。

[Fri Jul 13 01:16:18 2012] [error] [client 127.0.0.1] File does not exist: $HOME/mydomain-and-public-www-folder.tld/missing.html, referer: https://domain.tld/g/
[Fri Jul 13 01:24:20 2012] [error] [client 127.0.0.1] File does not exist: $HOME/mydomain-and-public-www-folder.tld/failed_auth.html, referer: https://domain.tld/g/
[Fri Jul 13 01:24:21 2012] [error] [client 127.0.0.1] File does not exist: $HOME/mydomain-and-public-www-folder.tld/g/bicon.git, referer: https://domain.tld/g/
[Fri Jul 13 01:24:21 2012] [error] [client 127.0.0.1] File does not exist: $HOME/mydomain-and-public-www-folder.tld/missing.html, referer: https://domain.tld/g/
[Fri Jul 13 01:26:11 2012] [error] [client 127.0.0.1] File does not exist: $HOME/mydomain-and-public-www-folder.tld/g/admin-scripts.git, referer: https://domain.tld/g/
[Fri Jul 13 01:26:11 2012] [error] [client 127.0.0.1] File does not exist: $HOME/mydomain-and-public-www-folder.tld/missing.html, referer: https://domain.tld/g/

無実の人を保護するために名前/IPが変更されましたが、要点はわかります. レポ リクエストは cgit CGI に戻らないようですが、どこに行くのでしょうか? より良いリダイレクトログを取得しようと取り組んでいます。我々は見るであろう。

更新 2:

そしてもちろん、私が忘れていRewriteLogたので、あなたが入れることができないディレクティブです、ばかげた私。.htaccess共有ホスティングで今何をすべきかわからない. なんて不愉快だ。これは、私が VPS ホスティングを検討し、お金の弾丸を噛み、この共有ホストを本当にばかげたことだけに使用するように促したいくつかの問題の 1 つです。

PS:元の問題をそのまま cgit dev リストに電子メールで送信しましたが、これについても応答がありませんでした。だから彼らは気にもかけず、馬鹿げた質問だと感じています。ハハ。

4

3 に答える 3

4

通常、この種の問題は、ツールの助けがあれば、はるかに簡単に解決できます。そしてあなたはする。

このページによると、設定を設定できvirtual-rootます(この場合は「/ g」に設定し、次のルールを使用します。

RewriteRule ^/g/$ /g/cgit.cgi                            [L,QSA]
RewriteRule ^/g/([^/]+)/$ /g/cgit.cgi?r=$1               [L,QSA]
RewriteRule ^/g/([^/]+)/([^/]+)/$ /g/cgit.cgi?r=$1&p=$2  [L,QSA]

私はあなたにぴったりだと思うものにパスを調整しましたが、ここでの再帰性についてはよくわかりません。(Lのために)機能するはずですが、機能しない場合は、フォルダー/gの名前を/gitのような名前に変更し、パス(/git/cgit.cgiなど)で使用することをお勧めします。

cssファイルとjsファイルについては、次のような別のルールが必要になります。

ReWriteCond /g/$1 -f
ReWriteRule ^/g/(.+)$ - [L]

これにより、ファイルが存在する場合はURLが変更されないままになります。上記のルールの前にこのルールを置きます。


アップデート:

virtual-root追加すると、ページ上のリンクが目的のフォームに変更されることを期待していました。cgit.cgiが設定を取得したことを再確認することをお勧めします。

ただし、それを回避したい場合は、次のルールを試してください。

ReWriteCond /g/$1 -f
ReWriteRule ^/g/cgit.cgi/(.+)$ /g/$1 [L]
于 2012-07-12T17:17:45.840 に答える
0

これは機能しますか?

# Redirect the browser to remove the "cgit.cgi" from the URL's address bar
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /g/cgit\.cgi/
RewriteRule ^g/cgit\.cgi/(.+)\.git /g/$1.git [R=301,L]

# Internally add the "cgit.cgi" so that it gets served properly
RewriteCond %{REQUEST_URI} !^/g/cgit.cgi/
RewriteRule ^g/(.+)\.git /g/cgit.cgi/$1.git [L]

おそらく、 .の後のどこかに挿入したいと思うでしょうRewriteEngine On。最初のルールは、要求された URI に が含まれてい/g/cgit.cgi/て、それで終わっているかどうかを確認し、含まれている.git場合は、削除してリダイレクトしcgit.cgiます。これにより、表示する相対リンクのベースが/g/ではなく になり/g/cgit.cgi/ます。次に、それらを内部的に元に戻す必要があります。ここで 2 番目のルールが登場します。リクエストに が含まれていない場合はcgit.cgi、URI が で終わる限り内部的に追加し.gitます。


cgit.cgi編集:「 mod-rewriteでURLから削除する方法」の意味を誤解した可能性があります

これらのルールが機能するかどうかを確認してください。

RewriteCond %{REQUEST_URI} ^/g/cgit\.cgi/(.+)$
RewriteCond %{DOCUMENT_ROOT}/g/%1 -f
RewriteRule ^g/cgit\.cgi/(.+)$ /g/$1 [L]

最初の条件は、リクエスト URI が で始まるかどうかをチェックし、/g/cgit.cgi/その後にあるものへの後方参照を作成します。次に、その部分が削除された場合に物理的に存在するファイルがあるかどうかを確認し、存在する場合cgit.cgiは削除されるように URI を書き換えます。

/g/このように、ディレクトリにある css と js と画像のリクエストは/g/cgit.cgi/something.git、参照されたリソースが実際に/g/.

于 2012-07-03T18:46:12.443 に答える