1

首先我想说我一直在研究,但我仍然没有找到解决这个问题的方法。
我想做一个隐形重定向。使用此 URL http://www.localhost.com/@user_name/search/?q=string进行搜索而不重定向到另一个页面,因为我应该检查 MySQL 数据库中的用户 @user_name 以检索其用户轮廓。

PHP 脚本 search.php

<?php
    echo 'USER:'.$_GET['user'].'<br/>';
    echo 'QUERY q:'.$_GET['q'].'<br/>';
?>

.htaccess

#Begin invisibly redirect 
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteRule \.(css|jpe?g|gif|png)$ - [L]

RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]

#This works with this (www.localhost.com/@user_name/search/X55)
#RewriteRule ^@([_A-Za-z0-9]+)/search/X(.*)$ /profile/search/search.php?user=$1&q=$2 [L]

#But ,for search, this doesn't work with this (www.localhost.com/@user_name/search/?q=string)
RewriteRule ^@([_A-Za-z0-9]+)/search/?q=(.*)$ /profile/search/search.php?user=$1&q=$2 [L]
#END invisibly redirect

结果

1

使用:#RewriteRule ^@([_A-Za-z0-9]+)/search/X(.*)$ /profile/search/search.php?user=$1&q=$2 [L]
AND
www.localhost。 com/@user_name/search/X55
它返回
USER:user_name
QUERY q:55/

2

使用:#RewriteRule ^@([_A-Za-z0-9]+)/search/?q=(.*)$ /profile/search/search.php?user=$1&q=$2 [L]
AND
www. localhost.com/@user_name/search/?q=string
它给出了一个服务器错误。

请帮忙,谢谢。

4

2 回答 2

0

您必须使用QSA标志来传递查询字符串:

RewriteRule ^@([_A-Za-z0-9]+)/search/?$ /profile/search/search.php?user=$1 [QSA,L]

上的问号..search/?$将斜杠字符/作为可选:

localhost.com/@user_name/search/?q=string 
localhost.com/@user_name/search?q=string 
于 2013-10-13T02:06:43.240 回答
0

请记住,RewriteRule这与 QUERY_STRING 不匹配。它仅匹配 REQUEST_URI。您只需要QSA在您的 URL 中添加 (Existing Query String Append) 标志。你的规则应该是:

RewriteRule ^@(\w+)/search/?$ /profile/search/search.php?user=$1 [L,QSA]

参考:Apache mod_rewrite 简介

于 2013-10-13T02:07:05.590 回答