0

ローカル プロジェクト (vHosts を使用) でいくつかのテストを行っています。something.kensaku.comにリダイレクトするRewriteRule を作成できましたが、 にリダイレクトしwww.kensakuapp.com/somethingたいと思います。something.kensaku.com/myappwww.kensakuapp.com/something/myapp

私の書き換えルールは次のとおりです。

Options +FollowSymLinks

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(^.*)\.kensaku.com
RewriteRule ^(^.*) goto.php?username=%1&path=$1

私は何時間もそれを試してきましたが、まだ部品を手に入れることができません/myapp. に行けばと一致しますがsomething.kensaku.com/myapp、一致すべきではありませんか?$1goto.php/myapp

goto.phpリダイレクトに使用するスクリプトの内容は次のとおりです。

<?php 
$user = $_GET['username'];
header("Location: http://www.kensakuapp.com/$user/".$_GET['path']); 
?>

PHP を使用せずに他の方法でそれを行う方法がある場合は、それを知っていただければ幸いです — しかし、可能であれば、PHP メソッドを使用し続けたいと考えています。 .

質問で何か見逃していたら教えてください!

編集: rewritemod のログ、トレース 3:

[Wed Mar 20 19:26:28.624291 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7d120/initial] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/
[Wed Mar 20 19:26:28.624352 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7b118/subreq] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/index.html
[Wed Mar 20 19:26:28.624402 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7b118/subreq] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/index.html.var
[Wed Mar 20 19:26:28.624434 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7b118/subreq] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/index.php
[Wed Mar 20 19:26:28.630172 2013] [rewrite:trace3] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7f2f0/initial] [perdir /opt/lampp/htdocs/kensaku/] strip per-dir prefix: /opt/lampp/htdocs/kensaku/ -> 
[Wed Mar 20 19:26:28.630202 2013] [rewrite:trace3] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7f2f0/initial] [perdir /opt/lampp/htdocs/kensaku/] applying pattern '^.+$' to uri ''
[Wed Mar 20 19:26:28.630216 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7f2f0/initial] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/
[Wed Mar 20 19:26:28.630277 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7b118/subreq] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/index.html
[Wed Mar 20 19:26:28.630327 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7b118/subreq] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/index.html.var
[Wed Mar 20 19:26:28.630360 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7b118/subreq] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/index.php

編集 2 : vHosts は次のとおりです。

# Kensaku Domains
<VirtualHost *:80>
   ServerAdmin admin@kensaku.com
   DocumentRoot /opt/lampp/htdocs/kensaku
   ServerName kensaku.com   
   ServerAlias *.kensaku.com
</VirtualHost>
<VirtualHost *:80>
   ServerAdmin admin@kensaku.com
   DocumentRoot /opt/lampp/htdocs/kensakuapp
   ServerName kensakuapp.com   
   ServerAlias *.kensakuapp.com
</VirtualHost>
4

2 に答える 2

2

ここでは PHP は必要ありません。

RewriteCond必要な部分を aでキャプチャしRewriteRuleて、置換で使用するだけです

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.+?)\.kensaku\.com$
RewriteRule ^.*$ http://www.kensakuapp.com/%1/$0 [R,L]

これにより、 の RewriteCondとsomethingの RewriteRule がキャプチャされます。%1myapp$0

于 2013-03-18T21:26:27.033 に答える
1

ログを見ないと完全にはわかりませんが、最初の推測では、パススルー フラグ ( [PT]) をルールに追加する必要があると思います。

RewriteRule ^(.*) /goto.php?username=%1&path=$1 [PT]

フラグに加えて、ルールPTの誤った double を削除し、 explicit^へのパスを作成しましたgoto.php(これは必須である場合とそうでない場合がありますが、おそらく良い方法です)。フラグに関しては、ドキュメントPTからこれを覚えておいてください:mod_rewrite

デフォルトでは、mod_rewrite は URL をファイルシステム パスにマップします。

書き換えのターゲット ( goto.php?...) はファイルシステム パスではないため、Apache でさらに処理する必要があります。passthroughフラグはこれを行うものです:

Alias や Redirect など、他の URI からファイル名へのトランスレータを処理するために、結果の URI を URL マッピング エンジンに強制的に戻します。

これで問題が解決しない場合は、要求に応じてログを投稿してください。詳細を確認できます

于 2013-03-18T19:53:19.293 に答える