1

我正在尝试获取一个带有查询字符串的页面以重定向到一个更好看的 url,然后获取该 url 并将其传输回原始查询字符串但不重定向(即不更改 url)目前我得到一个重定向循环(出于显而易见的原因)但我希望有一种方法可以阻止这种情况。

这是我的 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/

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

编辑我认为它可以用重写标志来完成,但我不确定,我对重写引擎很陌生

4

1 回答 1

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 放在服务器根目录中,并且根目录中也有一个文件 search.php。

原来的:

我认为您可以在第一条规则中使用PTQSA重写规则标志(http://httpd.apache.org/docs/current/rewrite/flags.html )

用于PT服务器端重定向(它不会更改用户/浏览器的 URL,但会更改您的服务器端脚本)

QSA如果您想在执行此重定向时携带查询,请使用

您可以将所有不针对现有文件的请求重定向到特定的 php 脚本,例如:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [PT,QSA]

于 2013-02-05T02:07:19.363 回答