現在、PHPでウェブショップを開発しています。これには、Zend Framework 2 を使用します。
私のルートはすべて、ロケール、つまり「nl_NL」または「en_EN」に存在し、その後にコントローラーとアクション www.mydomain.com/nl_NL/profile/login が続きます。私のプロジェクトで使用されているルートの例については、こちらをご覧ください。これはプロファイル モジュールに属します: http://pastebin.com/jmim47w8。
訪問者がアカウントを持っておらず、Cookie が設定されていない場合、ロケール変数は最初に次の関数から取得した変数に設定されます。
locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE'])
Cookie が設定されている場合は、その値が使用されます。一方、ユーザーがアカウントを持っていてログインしている場合、使用される変数はユーザーのプロファイルから取得されます。
私のスクリプト全体はローカルホストで動作します。ただし、サーバーではそうではありません。ページを読み込んでも何も表示されません。エラーログを確認しましたが、何も見つかりませんでした。ただし、 /nl_NL/ または「ロケールルート」正規表現の要件を満たすその他のロケールを URL に手動で配置すると、機能します。
私の最初の考えは、url_rewrite Apache モジュールがインストールまたはアクティブ化されていないことでしたが、他の Web サイトもこのモジュールを使用しており、同じサーバー上にあるため、これは論理的ではないようです。もちろん、いくつかのスクリプトを実行して有効になっているかどうかを確認しようとしましたが、役に立ちませんでした。私たちのサーバーは、シェル スクリプトの実行を許可しないように設定されているため、または phpinfo() を使用して apache モジュールが有効になっているかどうかを確認するように設定されているため、確認するのは非常に困難です。
私は自分の .htaccess ファイルが正しいことを確認しようとしましたが、.htaccess にはほとんど慣れていません。これは私の .htaccess です:
RewriteEngine On
# The following rule tells Apache that if the requested filename
# exists, simply serve it.
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
# The following rewrites all other queries to index.php. The
# condition ensures that if you are using Apache aliases to do
# mass virtual hosting, the base path will be prepended to
# allow proper resolution of the index.php file; it will work
# in non-aliased environments as well, providing a safe, one-size
# fits all solution.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]
私の IndexController がどのように見えるかを確認するには、http://pastebin.com/AEgm3Jmk を参照してください。
全体として、Zend FW 2 プロジェクトをホスティング サーバーで動作させる方法を知りたいと思いますが、URL の書き換えやロケール変数の使用を可能にするその他の方法を引き続き使用します。
この投稿に欠けているものがあり、さらに支援するために必要な場合は、喜んで投稿します。