2017-07-19 14 views
1

さて、私は何をしたいのか正しい構文を見つける必要があります。異なる書式のルール301を書き直してください

これらのリンク:すべての700の製品について

RewriteEngine On 
RewriteRule ^/sub1/(.*)/(.*)$ http://www.example.com/subdir/$1-newsite/ [R=301,L] 

を:

http://www.example.com/sub1/sub2/product1/ 
(...) 
http://www.example.com/sub1/sub2/product700/ 

は、私が試してみました何

http://www.example.com/sub3/product1-newsite/ 
(...) 
http://www.example.com/sub3/product700-newsite/ 

にリダイレクトする必要があります。 また、私は特定の製品のためにexeptionsを作る必要があります。

誰かが間違っているのを見ることができますか?

+0

http://www.example.com/sub1/sub2/product1/のどの場所にリダイレクトされていますか? –

+0

私は今、700個のルールを持っている: リダイレクト301/SUB1/SUB2 /製品1 http://www.example.com/sub3/product1-newsite 私の.htaccessは今、ほぼ80キロバイトで、ファイルサイズダウンスリムへの道を探して。 –

答えて

0

正規表現の番号付けに問題があると思います。

$ 1は最初にマッチしたグループ、$ 2は秒などです。$ 0はマッチした文字列全体(つまりパス全体)です。

試してみてください。

RewriteEngine On 
RewriteRule ^/sub1/sub2/(.*)$ http://www.example.com/subdir/$1-newsite/ [R=301,L] 

または

RewriteEngine On 
RewriteRule ^/sub1/(.*)/(.*)$ http://www.example.com/subdir/$2-newsite/ [R=301,L] 

編集

ああ...考えを持っていた...キャプチャの最初の正規表現は少しもされます貪欲...一致することができるので:

^/sub1/[sub2/product1-newsite]/[] o $ 1はsub2/product1-newsiteになり、$ 2は空になります(。*は幸せに何にもマッチできません)。

だから、あまりにも多くを取得しないようにする必要があります。 +*を変更

RewriteEngine On 
RewriteRule ^/sub1/([^/]+)/(.+)/$ http://www.example.com/subdir/$2-newsite/ [R=301,L] 

は、我々は、少なくとも1つの文字に一致を確認します。 [^/].を変更

は、私たちが「/以外のもの」と一致を確認します。

末尾に/を追加して、$ 2が末尾のスラッシュをキャプチャしないようにします。

それはうまくいけばそれを修正する必要があります。

+0

ありがとうございますが、動作しません。 最初の提案はオプションではありません。製品ごとに2番目のサブディレクトリが変更されるためです。 2番目の提案は何もリダイレクトしていません。別のアイデアがありますか? –

+0

答えを更新しました –

関連する問題