1

ウェブサイトに検索フォームがあります。フォームを送信すると、index.php によって処理されるため、URL は index.php?s=some のようになります。ここで、htaccess にいくつかの書き換えルールを追加しました。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/$ index.php?s=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)/?$ index.php?s=$2&f=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)/([^/]*)?$ index.php?s=$2&f=$1&t=$3 [QSA,L]

私のフォームには「検索」アクションがあり、次のようになります。

<form id="searchform" method="get" action="search">

送信すると、example.com/search/?s=some にリダイレクトされますが、私が望むのは、example.com/search/some にリダイレクトされることです。これを実現するには、書き換えルールに何を追加すればよいでしょうか?

4

2 に答える 2

0

私のプロジェクトの解決策を探していたときに、http://matthewjamestaylor.com/blog/how-to-post-forms-to-clean-rewritten-urlsに出会いました。関連する PHP は少しやり過ぎかもしれませんが、多くのユーティリティがあります。

.htaccess

# Clean up search URL
RewriteRule ^search/([^/\.]+)$ search.php?q=$1

PHP

<?
    // Collect the search phrase from the URL
    $qs = mysql_real_escape_string($_GET['q']);

    // Clean up by removing unwanted characters
    $qsclean = ereg_replace("[^ 0-9a-zA-Z]", " ", $qs);

    // Remove multiple adjacent spaces
    while (strstr($qsclean, "  ")) {
       $qsclean = str_replace("  ", " ", $qsclean);
    }

    // Prefix each keyword with a + (for the SQL statement)
    $qsql = "+".str_replace(" ", " +", $qsclean);
?>
于 2012-11-16T18:22:50.503 に答える
-1

post メソッドを使用しないのはなぜですか。より複雑なプログラミングを行うには、このメソッドを使用することをお勧めします。ポスト メソッドを使用してください。より安全です。

于 2012-11-16T18:25:37.687 に答える