重写重定向到网络服务器页面的网址

时间:2013-02-05 01:43:39

标签: php apache .htaccess rewrite

我正在尝试获取带有查询字符串的页面以重定向到更好看的网址,然后获取该网址并将其转移回原始查询字符串但不重定向(即不更改网址) 目前我正在获得一个重定向循环(原因很明显),但我希望有办法阻止它。

这是我的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/?propertytype=dev&bedrooms=2&minprice=0&maxprice=10000000&location=W1&development=W1

此页面是数据来源的服务器上的实际页面,但我希望用户看到。

http://www.domain.com/search/dev/2_bedrooms/price_0-10000000/town_W1/development_W1/

是否可以在没有重定向循环的情况下执行此操作。
谢谢你的帮助

编辑我认为可以用重写标志来完成,但我不确定,我是重写引擎的新手

1 个答案:

答案 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。

原件:

我认为您可以在第一条规则中使用PTQSA重写规则标记(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]