web-dev-qa-db-ja.com

書き換えルールにドキュメントルートを含めないApacheリダイレクト

私はこの作業ルールを持っています:

RewriteRule ^(.*)/amp/$ https://example.com/$1?amp=1 [QSA,R=301,NC,NE,L]

https://example.com/register/amp/https://example.com/register?amp=1にリダイレクトする場合。

正常に動作していますが、ブラウザのURLが変更されていないため、register?amp=1が読み込まれますが、ブラウザでは/register/amp/が表示されます。

この動作を実現するために、次のように変更してみます。

RewriteRule ^(.*)/amp/$ ./app.php/$1?amp=1 [QSA,R=301,NC,NE,L]

ただし、その後、https://example.com/home/user/public_html/register?amp=1にリダイレクトされます。

したがって、ドキュメントルートが誤って追加されており、それを実現するためにルールを変更する方法がわかりません。

1
shakaran
RewriteRule ^(.*)/amp/$ ./app.php/$1?amp=1 [QSA,R=301,NC,NE,L]

R(外部の「リダイレクト」)フラグを削除する必要があります。 substitution文字列の./プレフィックスもここでは不要であり、OSが最適化する必要のある複雑さを追加するだけです。

ディレクトリコンテキスト(サーバー構成の.htaccessまたは<Directory>コンテナ)で相対パスsubstitutionを指定し、代替プレフィックス(または「ベース」ディレクトリ)を指定していない場合)RewriteBaseディレクティブを使用すると、Apacheは書き換えプロセスの最後にディレクトリプレフィックス(この場合は/home/user/public_html/)を追加し直します。これは外部リダイレクトであるため、不正な形式のリダイレクトでこのディレクトリプレフィックスを公開しています。代わりに内部書き換えが必要です。

例えば:

RewriteRule ^(.*)/amp/$ app.php/$1?amp=1 [QSA,NC,NE,L]

ただし、substitutionapp.phpも含めましたが、これはターゲットURLに表示されていませんか? (app.phpおそらく正しい-実際のファイルシステムパスに書き換える必要があり、mod_dirによる追加の書き換えやサブリクエストに依存しないでください。)

1
MrWhite