0

これについてはまだ答えがないので、ここに投稿します。

root/language/sub/.../document.htaccess ファイル内の の形式で URL を照合し、次のように書き換えたいroot/sub/.../document.php?lang=language

私はヒットに近づいていますが、私の正規表現は入力URLを「キャッチ」していないようです。ここにあります :

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond ^[a-z]{2}.*$/%{REQUEST_FILENAME}\.php -f
RewriteRule ^([a-z]{2})/(.*)$ $2.php?lang=$1

誰かがここで間違っていることを指摘できますか? 私は正規表現や apache の書き換えの専門家ではありません。

ティヴム

* 編集 *

rootドメインすなわちmydomain.net

以下にいくつかの例を示します。

mydomain.net/fr/contact

に書き直すべき

mydomain.net/contact.php?lang=fr

mydomain.net/en/articles/view

書き直すべき

mydomain.net/articles/view.php?lang=en

等...

4

3 に答える 3

1

この構成を探していると思います:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^(.*/|)(en|de|fr)/(.*)$ [NC]
RewriteCond %1%3.php -f
RewriteRule ^(.*/|)(en|de|fr)/(.*)$ $1$3.php?lang=$2 [NC,QSA,L]

説明:

RewriteCond %{REQUEST_FILENAME} !-d

要求された URL がディレクトリでないかどうかを確認します。はいの場合、書き換えは処理されません。

RewriteCond %{REQUEST_FILENAME} ^(.*/|)(en|de|fr)/(.*)$ [NC]

URL に/xx/一部が含まれてxxいるかどうかenを確認します。フラグには大文字と小文字を使用できるため、たとえばorが受け入れられます。URLにそのような「言語」部分がない場合、書き換えは処理されません。defr[NC]ENFr

RewriteCond %1%3.php -f

%1%3.phpファイルが存在するかどうかを確認します。 %1is(.*/|)%3is は(.*)前の RewriteCond と一致し^(.*/|)(en|de|fr)/(.*)$ます。そのようなphpファイルが存在しない場合、書き換えは処理されません。

RewriteRule ^(.*/|)(en|de|fr)/(.*)$ $1$3.php?lang=$2 [NC,QSA,L]

RewriteRuleではこの行まで来れば条件がマッチするということで、すでにRewriteCondでチェック済みなので、今度はphpファイルへの書き換え処理を行い、lang部分を追加するのですが、[QSA]フラグもあるので他のGETも保持します。パラメータなので、既存のパラメータにlangが追加されます。フラグ[L]は、適用する必要があるのは最後の書き換えルールであり、この URL ではこれ以上の書き換えは処理されないことを示しています。

于 2012-09-08T14:57:50.113 に答える
0

ルートがそこで何をしているのかわかりません。試してみましたか

RewriteRule ^root/([a-z]{2})/(.*)$ root/$2.php?lang=$1
于 2012-09-08T00:45:10.393 に答える
0

間違っているのは 2 番目RewriteCondです。しかし、あなたの質問は漠然としています。変換しようとしている場合

root/foo/sub/.../something.php

root/sub/.../something.php?lang=foo

次に、これでそわそわし始めます:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^root/([^/]+)/sub/(.*)/%{REQUEST_FILENAME}$ root/sub/$2/%{REQUEST_FILENAME}?lang=$1
于 2012-09-08T04:45:28.300 に答える