【发布时间】:2010-10-02 01:55:29
【问题描述】:
我正在修改评论页面的 URL 结构,可以按城市、县、星数和技术人员进行过滤。我想让页面看起来像是静态 HTML 页面,并用连字符替换加号。 我的目标: - 在不修改评论页面的情况下应用新样式 URL,仅修改 htaccess 文件 - 设置从旧式 URL 到新式 URL 的 301 重定向 -将加号转换为连字符
目前评论 URL 如下所示:
domain.com/reviews/?city=City+Name
domain.com/reviews/?city=City+Name&page=2
domain.com/reviews/?county=County+Name
domain.com/reviews/?county=County+Name&page=2
domain.com/reviews/?stars=4
domain.com/reviews/?stars=4&page=2
domain.com/reviews/?tech=Tech+Name
domain.com/reviews/?tech=Tech+Name&page=2
我的目标是让它们看起来像这样(以及 301 旧样式 URL 到新样式 URL):
domain.com/reviews/city/City-Name.html
domain.com/reviews/city/City-Name/page/2.html
domain.com/reviews/county/County-Name.html
domain.com/reviews/county/County-Name/page/2.html
domain.com/reviews/stars/4.html
domain.com/reviews/stars/4/page/2.html
domain.com/reviews/tech/Tech-Name.html
domain.com/reviews/tech/Tech-Name/page/2.html
城市、县和技术名称并不总是包含加号(即波士顿与纽约+纽约),有些名称不止一个加号。目前,这是我必须用新样式 URL 掩盖旧样式 URL(顺便说一句,这很好用):
##FIRST PAGE REVIEWS (ie. reviews/city/city-name.html)
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\-(.*)\-(.*)\.html "/reviews/?$1=$2+$3+$4+$5+$6" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\-(.*)\.html "/reviews/?$1=$2+$3+$4+$5" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\.html "/reviews/?$1=$2+$3+$4" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\-(.*)\.html "/reviews/?$1=$2+$3" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\.html "/reviews/?$1=$2" [NC,L]
##PAGINATED REVIEWS (ie. reviews/city/city-name/page/2.html)
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\-(.*)\-(.*)/page/(.*)\.html "/reviews/?$1=$2+$3+$4+$5+$6&page=$7" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\-(.*)/page/(.*)\.html "/reviews/?$1=$2+$3+$4+$5&page=$6" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)/page/(.*)\.html "/reviews/?$1=$2+$3+$4&page=$5" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\-(.*)/page/(.*)\.html "/reviews/?$1=$2+$3&page=$4" [NC,L]
RewriteRule ^reviews/(.*)/(.*)/page/(.*)\.html "/reviews/?$1=$2&page=$3" [NC,L]
我遇到问题的部分是将旧样式 URL 301 转换为新样式 URL。这是我目前所拥有的:
RewriteCond %{QUERY_STRING} (.*)=(.*) [NC]
RewriteRule ^reviews/(.*) /reviews/%1/%2.html? [NS,R=301,NC]
RewriteCond %{QUERY_STRING} (.*)=(.*)&page=(.*) [NC]
RewriteRule ^reviews/(.*) /reviews/%1/%2/page/%3.html? [NS,R=301,NC]
当我尝试这个 FireFox 时,我给出了“页面没有正确重定向”错误。有什么想法吗?
【问题讨论】:
标签: .htaccess mod-rewrite http-status-code-301