0

この質問は威圧的に見えるかもしれません。いいえ、簡単ですが徹底的に説明します。ですから、読み続けてください。

多言語ページ (英語とスペイン語) を作成する必要があり、このセグメントを使用して各言語をルーティングしたいと考えています。

mysite/ ja /mycontroller/mymethod

これらは、.htaccess で作成したルールとその説明です。

# Rewrite url removing language segment and appending it as a request variable
RewriteRule ^(es|en)/(.*) $2?lang=$1 [L]

# Remove index.php from URL
RewriteCond $1 !^(index.php|css|images|scripts|robots.txt|sitemap.xml) 
RewriteRule ^(.*)$ index.php/$1 [L]

私が正しくやっていないことがあります:

最初のルールはリクエスト変数langを正しく作成していますが、言語セグメント ( en|es )を削除せずに URL がまだルーティングされているため、Codeigniter は" en"または「エス」。最終的には CI ルートでこのセグメントを取り除くことができましたが、.htaccess で行っているため、もう一度繰り返す必要はありません。私の知る限り、このセグメントは書き換え後は存在しないはずです。

: 次の理由により、この特定のケースでは CI ルートを使用したくありません。

  • デフォルトでは、追加されたリクエスト変数では機能しません。
  • パブリック URL で可視のリクエスト変数を使用したくない (構成ファイルでそれらを有効にする方法はありません)。
  • リクエスト変数をパラメーター セグメントとして渡すことは、インデックスまたは他のリクエストされたメソッドでそれを取得する必要があることを意味します。
  • これを前に、コンストラクター内で処理したい (その中で $_GET('lang') を取得する)。

これが役立つ場合に備えて、これらは index.php に入ったときにダンプされる $_GET および $_SERVER 変数 (すべてではない) です。

URL の例:http://localhost/mysite/en/portfolio

$_GET:

Array
(
    [lang] => en
)

$_SERVER:

Array
(
    [DOCUMENT_ROOT] => C:/xampp/htdocs
    [CONTEXT_DOCUMENT_ROOT] => C:/xampp/htdocs
    [SCRIPT_FILENAME] => C:/xampp/htdocs/mysite/index.php
    [REDIRECT_QUERY_STRING] => lang=en
    [REDIRECT_URL] => /mysite/portfolio
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => lang=en
    [REQUEST_URI] => /mysite/en/portfolio
    [SCRIPT_NAME] => /mysite/index.php
    [PATH_INFO] => /portfolio
    [PATH_TRANSLATED] => C:\xampp\htdocs\portfolio
    [PHP_SELF] => /mysite/index.php/portfolio
)

言語セグメントのない同じ URL は完全に機能し、Portfolio コントローラーに入ります。 http://localhost/mysite/portfolio

どんな助けでも大歓迎です。

4

2 に答える 2

0

このコードを一度試してみてください........

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
于 2012-12-21T14:17:15.383 に答える
0

に変更RewriteRule ^(es|en)/(.*) $2?lang=$1 [L]してみてくださいRewriteRule ^(es|en)/(.*) index.php/$2?lang=$1 [L]

于 2012-12-21T16:01:43.367 に答える