1

.htaccessPHP サーバー内のファイルの正規表現を探しています。

私が欲しいのは、最初のディレクトリから言語をパラメータとして検出することです:

  • nl
  • ja
  • なれ

その他のオプションは、ディレクトリまたはファイル名として扱う必要があります。言語は、他のパラメーターを壊さずにパラメーターとして指定する必要があります。

また、最後を/に置き換えて.phpください。

いくつかの例:

host.com/nl/index/ -> host.com/index.php?lang=nl
host.com/de/test/abc/ -> host.com/test/abc.php?lang=de
host.com/be/a/b/c/?t=23 -> host.com/a/b/c.php?lang=be&t=23

これは可能ですか?私はそれを働かせることができません、誰かが私を助けてくれることを願っています!

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule >>> requested expression and replacing pattern <<<
</IfModule>
4

3 に答える 3

3
RewriteRule ^/([a-z]{2})(/.+)/?$ $2.php?lang=$1 [QSA]

正規表現は、一度に 1 つずつ検討することで最も簡単に解釈できます。それを分解しましょう:

  • ^- URL の開始
  • /- 最初のスラッシュに一致
  • ([a-z]{2})- 2 文字を一致させてキャプチャする ($1変数に入る)
  • (- キャプチャ グループを開始します ( に入ります$2)
  • /- スラッシュに一致
  • .+- 0 個以上の文字に一致
  • )- キャプチャ グループの終了 ( $2)
  • /?- 「ファイルパス」のオプションの末尾のスラッシュに一致します (ただし、キャプチャしないでください)
  • $- URL の終わり

したがって、次の 2 つのものをキャプチャしています。

1 . 言語(キャプチャ グループ$1):

([a-z]{2})

2 . スラッシュ (キャプチャ グループ) で始まり、その後にオプションのスラッシュが続くファイルパス:$2

(/.+)/?

最後に、最後のQSAフラグは、元のクエリ文字列 (存在する場合) を書き換えられた URL に追加します。正規表現の一致で大文字と小文字を区別しないようにする (つまり、 のような URL を許可する) 場合は、次のフラグもhost.com/NL/index/追加できます。または、正規表現の代わりに使用して、大文字を明示的に許可することもできます。NC[QSA,NC][A-Za-z][a-z]

于 2013-07-17T17:40:11.107 に答える
1

mod_rewrite と .htaccess を有効にしてからhttpd.conf、このコードをディレクトリの.htaccess下に配置します。DOCUMENT_ROOT

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$2.php -f
RewriteRule ^([a-z]{2})/(.+?)/?$ /$2.php?lang=$1 [L,QSA,NC]
于 2013-07-17T17:39:08.613 に答える
1

これを試して

RewriteRule ^([a-z]{2})/(.+)/?$ /$2.php?lang=$1 [QSA]
于 2013-07-17T17:35:41.937 に答える