2016-05-03 6 views
1

このような現在の設定がある場合。いくつかの選択パス以外のすべてのサブディレクトリを書き換えます

domain.com/some-path/ 
domain.com/some-path/locations/ 
domain.com/some-path/locations/some-location 
domain.com/some-path/locations/locb 
domain.com/some-path/locations/infinite-location-list 

これは書き換えたくないURLパターンです。 some-pathサブディレクトリ、そのサブフォルダはlocations、サブディレクトリはlocationsです。

some-pathディレクトリの下の他のすべての子URLは、/some-path/ディレクトリに向けられた301である必要があります。

私はこのような何か試してみました:

location ~* ^/some-path/(.+)? { 

    if ($request_uri !~ "^/some-path/locations/(.*)$") { 
    return 301 http://domain.com/some-path/; 
    } 

} 

をしかし/some-path/リダイレクトループで立ち往生し、/some-path/locations/が私の目標を達成する方法についての404

思考サーバー側のnginxのをスローしますか?

答えて

1

これは設計上の悪い考えです。domain.com/some-path/locations/some-locationが無効であるdomain.com/some-path/location/some-locationとして有効であれば、入力がすべて抹消されてしまい、最初からやり直す必要がありますあなたの競争相手に行くだけです)。

あなたがそう正規表現のために主張している場合は、:

if ($request_uri !~ "^/some-path/($|locations/.*$)") { 
     return 301 http://domain.com/some-path/; 
    } 

あなたは、おそらく既存のlocation以内にこれを持っている必要があります、あるいはトップレベルでそれを維持、あなたの残りの部分に応じて、単一のlocationが与えられた要求を処理するようになるので

+1

デザイン面で完全に同意します。私は実際にこの要求を元に戻しています。サイトのこのセクション/サブディレクトリには、大量の書き換え/リダイレクトが必要で、個別に書き込むには全く効率が悪いだけです。私はこの戦いを失った場合のためにこれは私の代替手段になるだろう。 – Nathan

+0

@Nathan、まあ、クレイジーな書き換えには何も問題はありません - チェックアウトhttp://mdoc.su/、私のgithubのオープンソースです。 :-) – cnst

関連する問題