1

今、私は次のようなことをしています:

RewriteRule ^/?logout(/)?$ logout.php
RewriteRule ^/?config(/)?$ config.php

各 URL に対して同じことを行う 1 つのルールがあればよいので、新しいファイルを追加するたびにルールを追加し続ける必要はありません。

また、可能であれば、'/config/new' などを 'config_new.php' に一致させたいと思っています。いくつかの正規表現でこれを達成できると思いますか?

4

3 に答える 3

2

私はこのようなことをします:

RewriteRule ^/?(logout|config|foo)/?$ $1.php
RewriteRule ^/?(logout|config|foo)/(new|edit|delete)$ $1_$2.php

一致させたいURLを明示的にリストすることを好みます。これにより、静的コンテンツについて心配したり、後でphpファイルに書き直す必要のない新しいものを追加したりする必要がなくなります。

上記は、すべてのサブURLがすべてのルートURL(、、、)に対して有効であるbook/new場合movie/newは問題ありませんuser/newが、ルートアクションに応じて異なるサブURLを使用する場合はあまり適切でlogout/newはありません(あまり意味がありません)。これは、より複雑な正規表現を使用するか、すべてを単一のphpファイルにルーティングすることで処理できます。このファイルは、URLに基​​づいて含めるファイルと表示するファイルを決定します。

于 2008-09-19T19:07:30.587 に答える
2

試す:

RewriteRule ^/?(\w+)/?$ $1.php

$1 は、括弧内の最初にキャプチャされた文字列の内容です。2 番目のスラッシュを囲む括弧は必要ありません。

編集:他の試合については、これを試してください:

RewriteRule ^/?(\w+)/(\w+)/?$ $1_$2.php

于 2008-09-19T19:01:50.193 に答える
1

Modの書き換えは、質問の2番目の部分でやりたいように(潜在的に)無限の置換を行うことはできません。ただし、 Apache URL Rewriting Guideの下部にある外部書き換えエンジンを確認してください。

外部書き換えエンジン

説明:

よくある質問: FOO/BAR/QUUX などの問題を解決するにはどうすればよいですか。問題?mod_rewrite を使用しても解決策はないようです...

外部 RewriteMap、つまり RewriteMap のように機能するプログラムを使用します。これは、Apache の起動時に一度実行され、要求された URL を STDIN で受信し、結果の (通常は書き換えられた) URL を STDOUT に配置する必要があります (同じ順序で!)。

RewriteEngine on
RewriteMap    quux-map       prg:/path/to/map.quux.pl
RewriteRule   ^/~quux/(.*)$  /~quux/${quux-map:$1}

#!/path/to/perl

#   disable buffered I/O which would lead
#   to deadloops for the Apache server
$| = 1;

#   read URLs one per line from stdin and
#   generate substitution URL on stdout
while (<>) {
    s|^foo/|bar/|;
    print $_;
}

これはデモンストレーションのみの例であり、すべての URL /~quux/foo/... を /~quux/bar/... に書き換えるだけです。実際には、好きなようにプログラムできます。ただし、このようなマップは平均的なユーザーも使用できますが、定義できるのはシステム管理者だけであることに注意してください。

于 2008-09-19T19:04:32.903 に答える