Htaccess RewriteRule + 301

时间:2017-11-07 14:42:35

标签: .htaccess mod-rewrite

我们有一个重写规则设置,可将/spaces/test.php映射到/areas/spaces/test/,如下所示:

    RewriteRule ^areas/spaces/?$ spaces/$1.php

因此URL的映射方式不同,但基础逻辑/代码仍然存在   spaces/test.php

因此,如果我们现在可以访问areas/spaces/test/spaces/test.php,那么它们都能正常运行。 但是..我希望301重定向spaces/test.php> areas/spaces/test/

这可能吗?

2 个答案:

答案 0 :(得分:1)

您可以使用以下重写规则来完成您想要的任何事情。

RewriteRule ^spaces/([^/.]+).php$ /areas/spaces/$1/ [QSA,R=301,L]
RewriteRule ^areas/spaces/?$ spaces/$1.php [L]

我将引导您完成我添加的第一行:

  • ^spaces/([^/.]+)\.php$
  • 的请求
  • 重写为/areas/spaces/$1/
  • 但不是内部重写,而是使用重定向R=301
  • QSA告诉Apache附加任何传递到新位置的查询字符串。
  • L告诉Apache在匹配时停止重写该行,这样就会发生重定向并重写停止。在下一个正确位置请求时,第二行将根据需要匹配,因此在内部它是处理请求的.php文件。

另请参阅:official mod_rewrite docs

答案 1 :(得分:0)

这应该这样做:

RewriteRule ^areas/spaces/([^/.]+)/$ spaces/$1.php [L,E=CLEAN_URL:1]
RewriteCond %{ENV:REDIRECT_CLEAN_URL} !1
RewriteRule ^spaces/([^/.]+).php$ areas/spaces/$1/ [R=301,L]

Relevant SO question