2

簡単な説明

Web ページの書き換えをできるだけ少なくして制御するスマートな方法を考え出そうとしています。

たとえば、次のページ翻訳があるとします。

'domain.com/test/'        => 'domain.com/test.php'
'domain.com/errors/404/'  => 'domain.com/errors.php?code=404' 

すべてのページに個別の書き換えを行うこともできます...ただし、代わりに 1 つの正規表現をすべてのページに適用することで、これを最小限に抑えたいと考えています。したがって、上記に一致する正規表現は次のようになります。

^([a-z0-9\-]+)\/?([a-z0-9\-]+)?\/?$

次に、一致が次のように URL に配置されます(エラー ページでは に置き換えられることに注意してcoderequestください) 。

domain.com/$1.php?request=$2

そして、クエリ文字列を追加できます...

明らかに、場合によっては個別の書き換えが必要になりますが、通常は、巧妙な正規表現と適切に構造化されたページを使用することで、これを最小限に抑えることができます。

私の問題

上記の例と同様に、サイト内にこの正確な正規表現で書き換えられたページがあります。したがって、次のページは次のように翻訳されます。

'domain.com/shipments/open/' => 'domain.com/shipments.php?request=open'
'domain.com/settings/user/'  => 'domain.com/settings.php?request=user'
etc...

ただし、ここでは説明しませんが、次のように記述されたページもあります。

'domain.com/shipment/edit'

出荷ではなく出荷と表示されていることに注意してください。それにもかかわらず、私はこれを出荷ページに書き直してほしいと思っています。したがって、翻訳は次のようになります。

'domain.com/shipment/edit' => 'domain.com/shipments.php?request=edit'

出荷が出荷のエイリアスであることを指定する別の書き直し以外の方法は考えられません...

これを個別に書き換えたくない理由の 1 つは、単に出荷について話しているのではなく、エイリアスを作成する必要があるドキュメントがたくさんあるためです。めちゃくちゃ大きくなる。

私は次の解決策を思いつきました(しかし、明らかに私はそれらに満足していません):

  1. ルート ディレクトリに shipping.php というページを作成し、shipments.php の内容だけを含めます。
  2. エイリアスを使用して各ページの書き換えを書き込みます...

これを行う別の (より良い) 方法は考えられません。

4

1 に答える 1

1

例外が 1 つしかないので、その 1 つの例外を追加してみませんか?

「リライトリライトテクニック」を使っていきます(勝手に思いついた名前です笑)

RewriteEngine On

RewriteRule ^([a-z0-9-]+[^s/])s*/?([a-z0-9-]+)?/?$ $1s/$2 [NC]

RewriteRule ^([a-z0-9-]+)/?([a-z0-9-]+)?/?$ $1.php?request=$2

localhost とこの RewriteRuleTesterでテスト済み。

于 2013-05-22T00:30:35.053 に答える