【发布时间】:2015-01-07 09:03:39
【问题描述】:
我想知道如何 301 重定向所有格式的网址
/search/(.*)
(其中(.*) 不以.html 结尾)
到
/search/$1.html
主要是我不太确定如何匹配最后没有 .html 的 url 结构,这是我的问题。
谢谢
【问题讨论】:
标签: .htaccess mod-rewrite redirect url-rewriting http-status-code-301
我想知道如何 301 重定向所有格式的网址
/search/(.*)
(其中(.*) 不以.html 结尾)
到
/search/$1.html
主要是我不太确定如何匹配最后没有 .html 的 url 结构,这是我的问题。
谢谢
【问题讨论】:
标签: .htaccess mod-rewrite redirect url-rewriting http-status-code-301
您可以使用%{REQUEST_URI} 作为条件来否定它,如下所示:
RewriteCond %{REQUEST_URI} !^/search/([^.]+)\.html$ [NC]
RewriteRule ^search/(.*)$ /search/$1.html [R=302,NC,L]
我在上面的例子中使用了302,很简单,因为在测试时我总是使用 302 来确保它的工作,所以我不会被缓存,一旦你确认它工作,你可以安全地切换它到[R=301,NC,L]。
换句话说,如果 URL 不是 search/something.html,它将重定向到以 .html 结尾的版本。
注意:请记住,您放置此规则的顺序以及您的系统/CMS(如果有)会影响您获得的结果。如果您之前尝试过 301 重定向,您也可能会被缓存,它也会影响结果。
【讨论】: