我正在尝试获取带有查询字符串的页面以重定向到更好看的网址,然后获取该网址并将其转移回原始查询字符串但不重定向(即不更改网址) 目前我正在获得一个重定向循环(原因很明显),但我希望有办法阻止它。
这是我的htaccess文件中的代码
#rewrite search querystring
#/search/'apartment'/2_bedrooms/price_0-500000/town_W4/development_18,SW5/
RewriteRule ^search/([^/]+)/([^/]+)_bedrooms/price_([^/]+)-([^/]+)/town_([^/]+)/development_([^/]+) /search.php?propertytype=$1&bedrooms=$2&minprice=$3&maxprice=$4&location=$5&development=$6 [NC]
RewriteCond %{QUERY_STRING} propertytype=([^/]+)&bedrooms=([^/]+)&minprice=([^/]+)&maxprice=([^/]+)&location=([^/]+)&development=([^/]+)
/search/$1/$2_bedrooms/price_$3-$4/town_$5/development_$6 [R,L]
RewriteRule ^(.*)$ /search/%1/%2_bedrooms/price_%3-%4/town_%5/development_%6? [R,L]
所以它的意图是: 用户已被带到:
此页面是数据来源的服务器上的实际页面,但我希望用户看到。
http://www.domain.com/search/dev/2_bedrooms/price_0-10000000/town_W1/development_W1/
是否可以在没有重定向循环的情况下执行此操作。
谢谢你的帮助
编辑我认为可以用重写标志来完成,但我不确定,我是重写引擎的新手
答案 0 :(得分:1)
被修改:
这是一个完整的(和工作)解决方案:
RewriteEngine On
# User gets here:
# http://localhost/search/?propertytype=dev&bedrooms=2&minprice=0&maxprice=10000000&location=W1&development=W1
# He is explicit redirected to here:
# http://localhost/search/dev/2_bedrooms/price_0-10000000/town_W1/development_W1/
# Internally, apache calls this:
# http://localhost/search.php?propertytype=dev&bedrooms=2&minprice=0&maxprice=10000000&location=W1&development=W1
RewriteRule ^search/([^/]+)/([^/]+)_bedrooms/price_([^/]+)-([^/]+)/town_([^/]+)/development_([^/]+) search.php?propertytype=$1&bedrooms=$2&minprice=$3&maxprice=$4&location=$5&development=$6 [NC,PT]
RewriteCond %{QUERY_STRING} propertytype=([^/]+)&bedrooms=([^/]+)&minprice=([^/]+)&maxprice=([^/]+)&location=([^/]+)&development=([^/]+)
RewriteRule ^search/(.*)$ /search/%1/%2_bedrooms/price_%3-%4/town_%5/development_%6/? [R,L]
它假设您将.htaccess放在服务器根目录中,并且root中也有一个文件search.php。
原件:
我认为您可以在第一条规则中使用PT
和QSA
重写规则标记(http://httpd.apache.org/docs/current/rewrite/flags.html)
使用PT
进行服务器端重定向(不会更改用户/浏览器的URL,但会更改服务器端脚本的URL)
如果您想在执行此重定向时携带查询,请使用QSA
您可以将所有不以现有文件为目标的请求重定向到特定的php脚本,例如:
RewriteEngine On RewriteCond%{REQUEST_FILENAME}! - f
RewriteRule ^(。*)$ index.php?url = $ 1 [PT,QSA]