2

@Ωmegaのおかげで、以前の問題(詳細は.htaccess正規表現の問題)をほぼ完全に解決し、この解決策に到達しました:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^(.*/|)(en|de|fr)(/|)$ [NC]
RewriteCond %1%3index.php -f
RewriteRule ^(.*/|)(en|de|fr)(/|)$ index.php?lang=$2 [NC,QSA,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^(.*/|)(en|de|fr)(/.*|)$ [NC]
#RewriteCond $1$3.php -f
RewriteRule ^(.*/|)(en|de|fr)(/.*|)$ $1$3.php?lang=$2 [NC,QSA,L]

基本的に、これらの行はdomain/language/sub/.../somepagetoの形式で何でも書き換えdomain/sub/.../somepage.php?lang=languageます。最初のブロックは、にリダイレクトされるdomain/language/終了の有無にかかわらず、の形式のURL用です。/index.php

これは非常にうまく機能しますが、次の2つの小さな不具合が残っています。

  1. 2番目のブロックの3行目(私は#コメントしました)は、何があっても一致しません。奇妙な部分は、4行目で機能することです。つまり、私のページは実際に正常に表示されます。-fこれは、パラメータがここで間違っていることを意味しますか?

  2. /(2番目のブロックのみ、インデックスファイルで機能します)で終わるURLを入力すると、書き換えが壊れます。つまり、次のように出力されます。入力されたURLの潜在的な可能性を正規表現で除外する方法はありますか?domain/language/sub/.../somepage/.php/

ご意見ありがとうございます !

4

1 に答える 1

0

2番目のブロックの3行目(私は#コメントしました)は、何があっても一致しません。奇妙な部分は、4行目で機能することです。つまり、私のページは実際に正常に表示されます。これは、-fパラメーターがここで間違っていることを意味しますか?

間違った後方参照を使用しています。%1と%3が必要です。

RewriteCond %1%3.php -f

/で終わるURLを入力すると(2番目のブロックのみ、インデックスファイルで機能します)、書き換えが壊れます。つまり、domain / language / sub /.../ somepage/.phpとして出力されます。除外する方法はありますか。正規表現で入力されたURLの潜在的な/?

Yes, you can try changing your regexp from ^(.*/|)(en|de|fr)(/.*|)$ to ^(.*/|)(en|de|fr)(/.*?)/?$ in both the RewriteCond and RewriteRule.

于 2012-09-10T19:47:40.460 に答える