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


Query string in a mod_rewrite rule (.htaccess)

如果我在我的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参数中使用问号吗?

试试用这个代替。它将处理对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]

或者尝试在url前面不使用/:

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>';
?>

然后加载以下URL;这是基于你的评论,说你得到了一个错误与/search/google/0/web:

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

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

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