0

「言語」URI属性を使用して言語を設定する機能を備えたサイトがあります

oursite.com/home?language=en

SEOに適した2文字のURIプリペンダーも使用できる必要があります

oursite.com/en/home

私は現在、いくつかの例外を除いて.htaccessのindex.phpファイルへのリダイレクトを行っているので、私の.htaccessには書き換え用のこれらの2行があります

RewriteRule ^([a-z]{2}|[a-z]{2}-[A-Z]{2})/(.*)? ?$2/language=$1
RewriteRule !^(index\.php|robots\.txt|sitemap\.xml|robots\.txt) /index.php?/$1  

最終的に論理的な書き換えを行う必要があります

/index.php?/home?language=en

これを実現するための正しい書き換えルールセットは何でしょうか?それは本当に可能ですか?

4

2 に答える 2

3

RewriteRule !^(index\.php|robots\.txt|sitemap\.xml|robots\.txt) /index.php?/$1負の一致への後方参照を作成できないため、この行は機能しません。

また、:のようなリクエスト/index.php?/home?language=enはあいまいで、?予約されており、クエリ文字列にエンコードする必要があります。そうでない場合は、追加できます(つまり、に?なります&)。次のようなものを試してください:

RewriteRule ^([a-z]{2}|[a-z]{2}-[A-Z]{2})/(.*)? /$2?language=$1 [L]
RewriteRule !^(index\.php|robots\.txt|sitemap\.xml|robots\.txt) /index.php?%{REQUEST_URI} [L,QSA]

これには次のものが必要です。http://oursite.com/en/home内部でURIに書き換え/index.php?/home&language=enます。ただし、文字通り?クエリ文字列にエンコードする必要がある場合は、2番目のルールを次のように変更します。

RewriteRule !^(index\.php|robots\.txt|sitemap\.xml|robots\.txt) /index.php?%{REQUEST_URI}\%3F%{QUERY_STRING} [L,NE]
于 2012-12-04T08:00:54.080 に答える
0

これは最初のルールで行うことができます。

RewriteRule ^([a-z]{2}|[a-z]{2}-[A-Z]{2})/(.*)? /index.php?/$2?language=$1

2番目のルール(言語プレフィックスのないURLの場合)については、次のようにすることができます。ジョンが言ったように、あなたは否定的な一致を逆参照することはできません。

RewiteCond $1 !^index\.php|robots\.txt|sitemap\.xml|robots\.txt
RewriteRule (.*) /index.php?/$1
于 2012-12-09T20:32:01.390 に答える