0

リダイレクトルールに少しこだわっています。長いスピーチよりも良い例はほとんどありません。

IndexIgnore *
ErrorDocument 404 http://www.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.  [NC]
RewriteRule ^([^\.]+)\.example\.com$ http://example.com/private/$1/public/si.php  [L]

私の目的は、サブドメインを取得して([^\.]+)、の代わりにリダイレクトで使用することです$1。たとえば、にtest.example.comリダイレクトする必要がありますhttp://example.com/private/test/public/si.php

助けてくれてありがとう。

よろしく、S。

最終的な作業htaccess:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.  [NC]
RewriteCond %{REQUEST_URI} !^/private/
RewriteCond %{HTTP_HOST} ([^\.]+).example.com [NC]
RewriteRule ^ /private/%1/public/$1  [R=301,L]

にリダイレクトanysub.example.com/anypageしますanysub.example.com/private/anysub/public/anypage

4

2 に答える 2

2

a のパターンと照合するために使用される文字列にRewriteRuleは、ホスト名は含まれず、URI のみが含まれ、クエリ文字列は含まれません。実際の URI が何であるかを無視する場合は、RewriteRule何かに一致するパターンは必要ありません。以前のグループ化を後方参照するには、 %記号を使用する必要があります。RewriteCond

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$ [NC]
RewriteRule ^ http://example.com/private/%1/public/si.php [L]

R=301ルールの角括弧にフラグを追加して、リダイレクトを永続的にすることができます。

于 2012-12-28T00:42:41.743 に答える
1

条件の後方参照を書き換えてみてください。

RewriteCond %{HTTP_HOST} ([^\.]+).example.com [NC]
RewriteRule ^.*$ http://example.com/private/%1/public/si.php [L]
于 2012-12-27T23:41:19.217 に答える