我有一个网站,其中有动态URL,他们目前没有美化。我已经重新工作的网站和包括漂亮的URL,但真正的动态文件夹结构/文件名也发生了变化。
为了更好地解释,当前的动态URL如下所示
http://example.com/liveguide/year.php?year=2017
相同页面的新动态url是
http://example.com/shows/show-list.php?year=2017
我使用以下方法:
RewriteRule ^shows/(199[5-9]|200[0-9]|20[0-1][0-7])/?$ /shows/show-list.php?year=$1 [L]来启用漂亮的URLS,如
http://example.com/shows/2017
所以我想做的是,如果有人遵循原始动态URL的链接,他们最终会使用新的干净URL。到目前为止我刚刚
RewriteRule ^liveguide/year.php /shows/show-list.php [R=301,L]这将重定向到正确的页面,但在地址栏中留下的是丑陋的URL。我怎么做才能使新的,漂亮的URL在地址栏中?
有人来访
http://example.com/liveguide/year.php?year=2017
最后,他们在地址栏上看到
http://example.com/shows/2017
发布于 2017-05-21 05:49:43
您只需要匹配查询字符串,查询字符串位于一个单独的变量中,并用于RewriteCond中,该字符串捕获到%1、%2等。如下所示:
RewriteCond %{QUERY_STRING} ^year=(\d{4})$
RewriteRule ^liveguide/year\.php$ /shows/%1? [R=301,L]当我们在这里的时候,你真的只需要匹配那些确切的年份吗?如果/shows/1234也被重写了会有什么关系吗?可能不会,您可以从PHP中返回404,所以一个更简单的规则是可以的,就像上面提到的任意四个数字一样。它也将在不改变未来几年的情况下发挥作用。
RewriteRule ^shows/(\d{4})/?$ /shows/show-list.php?year=$1 [L]目标通常不是与您想要的完全匹配,而只是为了确保没有任何其他(站点的其他部分)会匹配不应该匹配的内容。更简单的规则以后更容易维护和审查。您的脚本必须已经能够处理坏数据,所以让它处理详细的检查,而不是不必要地重复它。
希望这能有所帮助。
https://stackoverflow.com/questions/44088442
复制相似问题