したがって、GETフォームによって生成されたURLでmod_rewriteを使用して、これからリダイレクトしようとしています:
index.php?page=trade&stocksymbol=GOOG
これに:
trade/GOOG
私はすでに.htaccessにこの行を持っています(Multiviews
オフになっています):
RewriteRule ^trade$ index.php?page=trade [L]
RewriteRule ^trade/(.*)$ index.php?page=trade&stocksymbol=$1 [L]
アドレスバーにtrade/GOOG/と手動で入力すると、問題なく動作します。
問題は、コントローラindex.phpがビューtrade.phpとともにヘッダー + フッターをレンダリングし、フォーム自体がtrade.phpにある MVC モデルを使用していることです。フォームを送信してtrade/GOOGに到達させたいのですが、これは GET フォームであるため、代わりにtrade/trade?stocksymbol=GOOGに移動します。
trade.php
<form action="trade" method="get">
<input type="text" name="stocksymbol" size="10" />
<input type="submit" value="Search" />
</form>
index.php
if (isset($_GET['page']))
$page = htmlspecialchars($_GET['page']);
else
$page = 'index';
switch ($page)
{
case 'trade':
if (isset($_GET['stocksymbol']))
{
$stocksymbol = htmlspecialchars($_GET['stocksymbol']);
}
render('templates/header', array('title' => 'Trade')); //render() is a function that extracts the array elements into variables and spits out the HTML
render('trade', array('page' => $page, 'stocksymbol' => $stocksymbol));
render('templates/footer');
break;
...
mod_rewrite を正しく理解しておらず、ロジックに何か問題があるため、ここで初歩的な間違いを犯していることはわかっていますが、まだ指を置くことはできません。可能であれば、シンプルに保つために、Javascript ソリューションの代わりに mod_rewrite のみを使用してこれを解決したいと思います。これが mod_rewrite で可能かどうかを知りたいからです。
編集:
GET リクエストが通っていないことがわかりました。index.phpを見ると$_SERVER['REQUEST_URI']
、送信されているリクエストが次のようになっていることがわかりました ( index.phpが の後にものを受け取っていないことを示唆しています)。/trade?stocksymbol=GOOG
?
また、Chrome で開発者ツールを有効にすると、実際に毎回 GET 要求があることがわかりますが、 index.phpまたはtrade.phpif (isset($_GET['stocksymbol']))
のどちらにあるかに関係なく、falseです。
したがって、mod_rewrite が私の GET リクエストを台無しにしていると思います。