首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Htaccess RewriteRule + 301

Htaccess RewriteRule + 301
EN

Stack Overflow用户
提问于 2017-11-07 14:42:34
回答 2查看 162关注 0票数 0

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

代码语言:javascript
复制
    RewriteRule ^areas/spaces/?$ spaces/$1.php

这样,URL就会被不同的映射,但是底层逻辑/代码仍然是spaces/test.php

因此,如果我们现在访问areas/spaces/test/spaces/test.php,它们都能工作。但是..。我想要一个301号重定向spaces/test.php > areas/spaces/test/

这个是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-07 14:50:55

您可以使用以下重写规则来完成您希望的两件事。

代码语言:javascript
复制
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文件。

另见: docs

票数 1
EN

Stack Overflow用户

发布于 2017-11-08 14:34:08

这应该可以做到:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47160658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档