6

これは機能します:

HTML

<a href="/search/querystring">query</a>

htaccess

RewriteRule ^search/([-0-9a-z]+)$ /search.php?q=$1 [L]

検索フォームを通過する:

<form method="get" action="/search">
<input type="search" name="q" value="querystring" />
<input type="submit" />
</form>

これは htaccess で可能ですか、それとも search.php 内から PHP でリダイレクトする必要がありますか?

望ましい結果の例: http://twitter.com/search/hello

編集

これを行うために JavaScript に依存したくないので、検索エンジンや JavaScript が無効になっている人にもこれが表示されます。

4

6 に答える 6

7

問題は、HTML フォームを GET メソッドで作成したことだと思います。これにより、結果として指定した方法で URL が自動的に開きます。目的の検索クエリを送信したい場合は、フォームを JavaScript でハックして、見栄えの良い URL を次のように呼び出す必要があります。

<form method="get" action="/search/" onsubmit="return false;">
<input type="search" name="q" value="querystring" />
<input type="submit" onclick="window.location.href=this.form.action + this.form.q.value;" />
</form>
于 2011-03-28T20:15:32.070 に答える
2

実際には、本質的に上記の書き換えルールですが、逆の別の書き換えルールを作成する必要があると思います。次に、最初の書き換えルールの上に配置します。

RewriteRule ^/search?q=([-0-9a-z]+)$ /search/$1 [NC]
RewriteRule ^search/([-0-9a-z]+)$ /search.php?q=$1 [L]

私にはかなりゲットーに見えますが。フォームから送信ボタンを削除し、javascript を使用してリダイレクトする必要があるかもしれません。

于 2011-03-28T20:12:55.820 に答える
2

このページのトリックを参照して ください。トリックは、フォームを自分自身に送信し (または、中間ページにリダイレクトできると思います)、サーバー側のロジックを使用してクリーンな URL を使用してリダイレクトすることです。

于 2013-02-07T16:27:41.940 に答える
0

JavaScript を使用しない例

代わりに、検索フォーム アクションを「searchredirect.php」に設定し、名前を「q」に入力します。

searchredirect.php という名前の新しい php ファイルを作成し、次のコードのみを含めます。

<?php  
if (isset($_GET['q'])){  
$url = $_GET['q'];  
header("location: search/".$url);  
} else {  
header("location: search");
} 
?>

元の検索ページに「searchclean.php」という名前を付けます

.htaccess ファイルには、次の書き換えルールがあります。

RewriteRule ^search/([^/]*)$ /searchclean.php?q=$1 [L]
于 2014-01-01T07:06:12.400 に答える
0

この問題を mod_rewrite (JavaScript なし) だけで解決しようとしている人は、次の質問を参照してください: mod_rewrite を使用したリダイレクトと書き換え

于 2011-03-29T15:21:08.193 に答える
0

守っただけ

RewriteRule ^search/([^/\.]+)/?$ search.php?q=$1 [L]

私の .htaccess では、以下のコードで search_redirect.php を作成しました。

<?php  
if (isset($_GET['q'])){  
$url = $_GET['q'];  
header("location: search/".$url);  
} else {  
header("location: search");
} 
?>

それからもちろん、フォームを goto search_redirect.phpにリダイレクトして出来上がりです。この組み合わせは魅力的でした。ページネーションがあるので、それ以上何もする必要はありませんでした。それらはすべて、クエリ文字列で GET を使用し、次に整数に $i を使用するためです。

RewriteRule ^search/([^/\.]+)/page/([^/\.]+)?$ search.php?q=$1&pn=$2 [L]

于 2015-10-25T06:54:04.953 に答える