0

既存のページは と呼ばれ/foo/bar.phpます。私が行ったことは、ユーザーが を入力すると、( URL バーに保持しながら)/foobarの内容をロードするように書き直すことです。/foo/bar.php/foobar

しかし、逆も必要です。ユーザーがリンクまたはタイプ/foo/bar.phpをクリックすると、URL が必要になり/foobarます。これは、すべてのリンクを手動で変更することを避けるためです。

どうすればそれを行うことができますか (可能であれば、http リダイレクトなしで、いくつかの書き換えマジックを介して)? そして、これら 2 つのルールが共存する可能性はありますか?

編集- 最初の応答の後、問題の説明が適切ではないことに気付きました。、 の連結ではなく、任意の文字列 ( )/foobarであると想定されています。foobar/foo/bar.php/whatever

編集2:

に追加RewriteRule ^whetever/?$ /foo/bar.php [L]しました/ .htaccess。次に、に追加RewriteRule bar\.php$ /whetever [R=302,L]しました/foo .htaccess。問題は、それが循環参照であり、失敗することです。

ありがとう、

ジョン

4

2 に答える 2

1
RewriteEngine On

RewriteCond %{REQUEST_URI} ^/foo/[^/]+\.php$
RewriteCond %{IS_SUBREQ} !true
RewriteRule ^/foo/([^/]+)\.php$ /foo$1 [R,L]

RewriteCond %{REQUEST_URI} ^/foo[^/]
RewriteRule ^/foo(.*) /foo/$1.php [L]

最初の部分/foo/something.phpはそれらを照合してに変換しますが/foosomethingそれがサブリクエストでない場合に限ります。

2番目の部分は、サブリクエストを介して、任意のものを受け取り、/foosometingそれをに変換します/foo/something.php

于 2012-07-25T15:18:32.740 に答える
0

%{THE_REQUEST}実際のリクエストがphpファイルに対するものである場合にのみ、照合を試みてリダイレクトを行うことができます:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /foo/bar\.php
RewriteRule bar\.php$ /whatever [R=302,L]

RewriteRule ^whatever/?$ /foo/bar.php [L]
于 2012-07-25T17:42:27.603 に答える