2011-07-08 11 views
0

私は数時間この解決策に取り組んできました&誰かが私を助けてくれるのではないかと考えたら、時間を節約できます。私の質問は、Apache mod_rewriteに関するものです。Apache Mod書き換えヘルプ

この形式でURLを取るために:もちろんです、私の要件に固有のものしかし、そこにドキュメントのトンが存在しない

language/pagename.php 

(言語はどちらかになりますが「英語」や「フレンチ」すべてのURLには.phpの拡張子が付きます)。ページ名は任意の単語文字(w+)になります。その後、

そしてURLは、ユーザーのブラウザでは変更されませんが、そのため、PHPは、この形式で受け取ることができるので、それを書き換える:

例えば
language/page.php?slug=pagename 

したがって、$_GET['slug']は値pagenameを返し、すべての要求はpage.phpによって処理されます。

これまでのところ私の最高の推測では、しかし、このメイクPHPは例english/financial.phpのために、このURLのためslug=pageことを教え

RewriteEngine On 
RewriteBase/
RewriteRule ^english/(\w+).php$ english/page.php?slug=$1 

です。 financialではなく

てきたが、これらのルールを使用し...あまりにも(.)代わりw &のように

答えて

0

を他の正規表現規則の束を試してみました:これは.htaccessので場所にする必要がある

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(english|french)/([^/\.]+)\.php$ /$1/page.php?slug=$2 [NC,QSA,L] 
  1. をファイルをルートフォルダに保存します。設定ファイル(例:httpd-vhost.conf<VirtualHost>ディレクティブ内)を配置する場合は、ルールを少し変更する必要があります。

  2. このルールは、ルール(english|frenchパート)に追加する限り、どの言語でも機能するはずです。

  3. このルールには、そのようなファイルがすでに存在する場合は書き換えられない条件があります。 これはslug=pageの問題を解決するはずです:あなたのルールでは、書き換えループが発生している可能性が高いです(書き換えが発生した後、次の繰り返しに進む - これはmod_rewriteの仕組みであり、 )。 RewriteCond %{REQUEST_FILENAME} !-fの代わりにRewriteCond %{REQUEST_URI} !^/(english|french)/page\.php [NC]を使用することもできますが、維持するのはもう少し難しいです(ここに言語を追加する必要がありますし、書き換えルール自体にも追加する必要があります)。

  4. すでに他の書き換えルールがある場合は、正しい場所に配置してください(ルールの順番に注意してください)。

  5. 私は、私はこのパターンを使用しましたことだろうかページ名(ナメクジ)確かに知っていないので:[^/\.]+/または.を除く任意の文字を)..しかし、あなたは\w+または何あなたが思うにそれを変更することがあり良くなります。

  6. ルールのいずれかのオプションのページ・パラメータ(クエリ文字列)保存 - あなたはbeuaty

+0

紹介/トラッキングコードを保存するために有用などを! 1つのルールで両方の言語フォルダをカバーするための特別なボーナスポイント..歓声。 – Reece

関連する問題