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 方法?我认为这种方法会使编程更复杂 请使用 post 方法。它更安全。

于 2012-11-16T18:25:37.687 回答