2016-08-08 14 views
1

表示するコンテンツを決定するパラメータを取得するページを作成しています。HTAccess getパラメータを使用した書き換えルール

http://www.domain.com/elections/candidate-speech/candidate-name/

を、私は前にこれを行っている

http://www.domain.com/elections/candidate-speech.php?name=candidate-name

ページにリダイレクト:より良い探してURLを作成するために、私は、URLは以下のように見えることができるようにhtaccessファイルを使用しています私は別のページに書いたが、同様の望ましい構造を持つルールを再利用していました。私が使っているルールは次のとおりです。

RewriteEngine On # Turn on Rewriting Engine 

RewriteRule ^candidate-speech/([A-Za-z0-9-]+)/?$ candidate-speech.php?name=$1 

私が直接候補者の名前を意図したURL(http://www.domain.com/elections/candidate-speech.php?name=candidate-name)をロードする場合は、私が意図したとおりに表示されたページを取得します。ただし、短縮版を使用しようとすると正しいページが表示されますが、$_GETには何も表示されません。

.htaccessファイルは、該当する.phpファイルと同様に、electionsディレクトリに格納されます。これは、このルールが成功した過去の設定と同じです。私はhtaccessをかなり新しくしています。それが私の前回の成功に後退している理由です。私はサーバーを再起動し、キャッシュをクリアしました。無駄に。私は何が間違っていますか?

+0

'election/.htaccess'に他のルールはありますか? '[L]'フラグを 'candidate-speech.php'ルールの末尾に追加してください(そうでなければ正しく見えます)。一部のブラウザでは、リダイレクトをクリアしたにもかかわらず、リダイレクトをキャッシュすることについて実際に積極的です。私は別のブラウザやプライベートブラウジングウィンドウでこれを試してみよう。 –

+1

もしあなたがまだそれをしていないのであれば、 '$ _GET'に何が(まったく何も)存在しないかを確かめるために' var_dump($ _ GET); 'を必ず実行してください。 –

+0

ページにすべてのプレースホルダ情報が出力されたら、最初に$ _GETでvar_dumpを実行しました。 他の唯一のルールは、投稿されたルールの複製ですが、入力と出力の両方のURLにcandidate-speechの代わりにcandidate-speech-wkを使用しています(私は、何かが間違っている場合に使用できる作業ファイルを持っていますライブ) –

答えて

1

は、このようにそれを持っている:あなたの.phpファイル名が出発成分candidate-speech/と同じであるので、MultiViewsオプションを無効に

Options -MultiViews 
RewriteEngine On 
RewriteBase /elections/ 

RewriteRule ^candidate-speech/([\w-]+)/?$ candidate-speech.php?name=$1 [L,QSA,NC] 

はここでは重要です。mod_rewriteを実行し、ファイルのApacheサーバの一致の拡張機能を作る

オプションMultiViewshttp://httpd.apache.org/docs/2.4/content-negotiation.htmlを参照)Apache's content negotiation moduleで使用されています。したがって、/fileがURLの場合、Apacheは/file.htmlを提供します。

関連する問題