.htaccess 将多个 url 重定向到相应的新页面

.htaccess redirect multiple urls to their corresponding new pages

我想使用 .htaccess 重定向以下网址:

/books/garden /花园书籍
/movies/dvd-comedy/dvd/comedy
/music-soundtracks/new/music/soundtracks

有人知道怎么做吗?

将此添加到站点根目录中的 .htaccess 文件中。

RewriteEngine On

RewriteCond %{THE_REQUEST} \ /+(books)/(garden)\s [NC]
RewriteRule ^ /%2-%1 [R=301,L]
RewriteRule ^(garden)-(books)/?$ // [NC,L]

RewriteCond %{THE_REQUEST} \ /+movies/(dvd)-(comedy)/?[\s?] [NC]
RewriteRule ^ /%1/%2 [R=301,L]
RewriteRule ^(dvd)/(comedy)/?$ /movies/- [NC,L]

RewriteCond %{THE_REQUEST} \ /+(music)-(soundtracks)/new/?[\s?] [NC]
RewriteRule ^ /%1/%2 [R=301,L]
RewriteRule ^(music)/(soundtracks)/?$ /-/new [NC,L]

是的,这是可能的,但您需要考虑这一点:如果您的实际 URL 是,比方说,/page.php?var=val,而您漂亮的 URL 是 /page/var/val,那么上述规则确保不仅漂亮的版本 /page/var/val 有效,而且如果有人试图访问实际的 /page.php?var=val 他们也会被重定向回 /page/var/val

因此,如果您只对解析漂亮的 URL 感兴趣,则只能使用以下内容。

RewriteEngine On

RewriteRule ^(garden)-(books)/?$ // [NC,L]
RewriteRule ^(dvd)/(comedy)/?$ /movies/- [NC,L]
RewriteRule ^(music)/(soundtracks)/?$ /-/new [NC,L]

如果你想要一个更简单的解决方案,你也可以试试这个:

Redirect 301 /books/garden /garden-books
Redirect 301 /movies/dvd-comedy /dvd/comedy
Redirect 301 /music-soundtracks/new /music/soundtracks

旧的url在"Redirect 301"之后,然后是新的url。