我正在尝试在htaccess中使用屏蔽的url,现在我无法在php中获得搜索查询


I am trying to use masked url in htaccess and now i am not able to get search queries in php

我正在php中创建一个网站,并使用htaccess重写规则。我隐藏核心php页面的htaceess代码是


RewriteCond %{REQUEST_URI} search
RewriteRule search /directory/search.php?&q=$1

我正在使用从中获取的方法提交查询,表单是


<form action="http://<?php echo $_SERVER['SERVER_NAME']?>/search" method="GET">
<span><input type="text" name="q" class="search rounded" placeholder="Search something... :)" x-webkit-speech speech onwebkitspeechchange="this.form.submit();"></span>
</form>

我的search.php临时代码是


<?php
if(!isset( $_GET['q']))
    {
        echo '<p>Page is not set!</p>';
    }
        else
        {
            echo '<p>Search Page is running cool';
        }
?>

当我以类似于搜索单词"hello"的形式搜索时,它会显示url"localhost/search?q=hello"

另一件事是我得到了"内部服务器错误500"

我使用的是examplep,我认为我的htaccess首先工作不正常,然后搜索表单没有发送正确的查询等等。所以请帮帮我。

您正在做的是一个GET请求类型。

需要将参数传递给初始重写变量。

试试这个:

RewriteRule ^search/([^/]*)/$ /directory/search.php?&q=$1 [L]

要POST数据,而不是GET:

RewriteRule ^search /directory/search.php?q=$1 [NC,P]

"p"的作用类似于"L",它停止处理规则,但它还"告诉"模块请求应原封不动地传递给代理模块(意味着保留POST数据)。

此外,请确保打开重写引擎,并设置选项。如果不打开重写引擎,它将给你一个500的错误。

这是我通常使用的:

Options +FollowSymlinks
Options -MultiViews 
RewriteEngine On
RewriteBase /
ErrorDocument 404 /error.php
ErrorDocument 300 /error.php
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d