ウェブサイト(PHP 7で書かれたアプリ)に別の言語を追加したい。私は、SEOの優れた慣行では、言語に応じて、サイトのすべてのページに異なるURLからアクセスできるようにする必要があることを発見しました。
現在、私の.htaccessは次のようになっています。
RewriteEngine on
Options +FollowSymLinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([a-zA-z0-9-]+)$ $1.php [NC,L]
したがって、ユーザーがhttp://example.com/contactと入力する(またはリンクをクリックする)と、ページcontact.php(存在する場合)が表示されます。私が達成したいのは、http: //example.com/en/contactをまったく同じファイルcontact.phpにリダイレクトすることですが、$ _ GET引数を使用し、/ contactをcontact.phpにリダイレクトします(この引数なし)。私はそれが次のようになると思いました:
... everything from above code sample and then:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^en/([a-zA-z0-9-]+)$ $1.php?lang=en [NC,L]
しかし、それは機能しません。これを機能させる理由と方法について何かアイデアはありますか?
最後の条件がen/file.php
存在することを確認しますが、これは決して当てはまりません。そのため、ルールは決して満たされません。それを削除するか(ただし、存在しないファイルにも適用されます)、障害のある状態を書き換えることでこの回避策を使用します
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^en/([^/]+)$ /$1.php?lang=en [NC,L]
より完全にする/contact.php?lang=en
ために、直接アクセスしようとするユーザーをリダイレクトすることもできます(SEOに適しています)。最終的なhtaccessは次のようになります。
RewriteEngine On
# if url is /file.php?lang=en and file exists then redirect to /en/file
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUEST} \s/([^/\s\?&]+)\.php\?lang=en\s [NC]
RewriteRule ^ /en/%1? [R=301,L]
# if url is /en/file and /file.php exists then internally rewrite to /file.php?lang=en
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^en/([^/]+)$ /$1.php?lang=en [NC,L]
注:上記のコードはen
言語に固有ですが、複数の言語に簡単に適応させることができます
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加