4

次のようなパラメーターを使用して、PHP で複数の言語 (英語とスペイン語) をサポートする Web サイトを開発しています。

www.website.com/contact?lang=en
www.website.com/contact?lang=es

はい、拡張子 .php なしで...私はそれが悪い習慣であることを知っているので、これを持ちたいです:

www.website.com/en/contact
www.website.com/es/contact

ここでstackoverflowの他の投稿を読みましたが、PHPフレームワークを使用したくありません。また、Mod Rewriteを使用する必要があることを読みました(拡張機能の削除に既に使用しているため)。実際、私はこの投稿(および他の投稿も) を読みましたが、何も機能しません。

完了したら、使用する必要がある Google ページを読みます。

<link rel="alternate" href="http://www.website.com/" hreflang="x-default" />

これは正しいです?

ありがとう

編集1:

私の .htaccess の内容は次のとおりです。

RewriteBase /

#Prevent directory listing
Options All -Indexes

#Disable Etags
Header unset ETag
FileETag None

#Prevent viewing of .htaccess
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
</Files>

RewriteEngine on

#Redirect non-www/www
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

#RewriteCond %{HTTPS} off
#RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
#RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Options +FollowSymlinks -MultiViews
#Rewrite url
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html

RewriteCond %{REQUEST_FILENAME} -f  [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]

RewriteRule ^([^/]+)/([^/]+)  /$2?lang=$1 [L,NC,QSA]
4

3 に答える 3

2

不足しているphpファイルの末尾に合わせて小さな適応でマークアウトした投稿のソリューションを使用したとしても:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f  [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]

RewriteRule ^([^/]+)/([^/]+)  /$2?lang=$1 [L,NC,QSA]
于 2015-03-21T18:45:22.700 に答える
1

これにより、リダイレクトが処理されます。@w3d が述べているように、リンクを変更する必要があります。

RewriteCond %{QUERY_STRING} ^lang=(en|es)$ [NC]
RewriteRule ^contact$ /%1/contact? [R=301,L]

クエリ文字列の|は「または」を意味し、他の言語が必要な場合はそこに追加するか、安全性の低い言語に変更できます.*

于 2015-03-21T21:30:00.023 に答える