我正在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