mod_rewrite规则中的查询字符串(.htaccess)

时间:2014-06-15 21:06:06

标签: php .htaccess mod-rewrite query-string

如果我的q=参数中有问号,则.htaccess会将我重定向到404错误页面。

这是我的.htaccess重写规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^search/(.*)/(.*)/(.*)$ results.php?q=$1&start=$2&type=$3 [L,QSA]

有人知道如何在get参数中允许问号吗?

1 个答案:

答案 0 :(得分:1)

请尝试使用此功能。它将处理search/的所有请求。从三个路径 - 如您的示例所示 - 到一条路径:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^/search/([a-z0-9]+)/?([^/]*)$ /results.php?q=$1&$2 [QSA]
RewriteRule ^/search/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+)/?$ /results.php?q=$1&start=$2&type=$3 [L]
RewriteRule ^/search/([a-z0-9]+)/([a-z0-9]+)/?$ /results.php?q=$1&start=$2 [L]
RewriteRule ^/search/([a-z0-9]+)/?$ /results.php?q=$1 [L]

或者在网址前面没有/的情况下尝试此操作:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^search/([a-z0-9]+)/?([^/]*)$ results.php?q=$1&$2 [QSA]
RewriteRule ^search/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+)/?$ results.php?q=$1&start=$2&type=$3 [L]
RewriteRule ^search/([a-z0-9]+)/([a-z0-9]+)/?$ results.php?q=$1&start=$2 [L]
RewriteRule ^search/([a-z0-9]+)/?$ results.php?q=$1 [L]

第二个适用于我当地的MAMP设置。如果我创建一个results.php,其内容为:

<?php

echo '<pre>';
print_r($_GET);
echo '</pre>';

?>

然后加载以下网址;我根据你的评论说明你的/search/google/0/web错误:

 http://localhost:8888/search/google/0/web

这是我在浏览器中得到的结果:

Array
(
    [q] => google
    [start] => 0
    [type] => web
)