mod_rewrite を使い始めたばかりです。これは、複数の言語をサポートする非常に基本的な構造化された Web サイトに使用するものです。
RewriteEngine on
ErrorDocument 404 /error404.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z]{2})/([^/]+)$ $2.php?lang=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z]{2})/$ index.php?lang=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z]{2})$ index.php?lang=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ $1.php [L]
私の考えでは、言語は URl の先頭に示され、2 文字 (az または AZ) である必要があります。その後、文字列と同じファイル名で .php だけが添付された php ファイルを参照する文字列があります。言語は GET 変数 ( ?lang=en
) として追加されます。
したがって、URl は次のよう/en/index
になり、次に にリダイレクトされindex.php?lang=en
ます。
URl が言語ではなく直接文字列で始まる場合、GET 変数は文字列に付加されません。たとえば/index
、 を参照する必要がありますindex.php
。文字列がない場合は、インデックスをデフォルトとして使用する必要があります。
ここまでは順調ですね。正常に動作します。文字列を入力しただけで (言語に 2 文字を使用するかどうかに関係なく)、サイトに移動する代わりに、常に 500 内部サーバー エラーが表示されerror404.php
ます。また、.htaccess のこの行 (404) を削除しても、同じエラーになります。
したがって、.htaccess の他の行に何か問題があり、このエラーの原因になっていると思います。
どんな助けでも大歓迎です!