首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用htaccess文件将所有流量重定向到index.php,非www重定向到www。

使用htaccess文件将所有流量重定向到index.php,非www重定向到www。
EN

Stack Overflow用户
提问于 2017-02-01 00:39:36
回答 1查看 2.2K关注 0票数 3

我看过其他问题,似乎没有人能回答我想要做的事情。目前,我的.htaccess文件中有以下内容可以将所有非www流量重定向到www:

代码语言:javascript
复制
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

这个很好用。无论文件是否存在,如果有人试图访问example.com或example.com/page- not --它将永久地重定向到www.example.com或www.example.com/page-not- file。

我想改变网站的运行方式,让所有的请求都通过一个特定的文件来路由(例如,主目录中的index.php )。应该发生的是,如果有人转到www.example.com/any-page,它仍然会显示www.example.com/any-page,但我将在www.example.com/index.php中处理它,这样我就可以在一个文件中处理所有流量。我可以通过以下方式做到这一点:

代码语言:javascript
复制
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]

但是,这只在请求的文件夹不存在时才会重定向(而且它也不会将example.org/any-folder更改为www.example.org/any-folder

简而言之,是否有一种方法可以通过单个文件路由所有请求,即使请求的文件存在,并对所有非www通信量进行301重定向?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-01 00:50:16

是的,有。首先,保留原来的规则(稍作修改,见下文):

代码语言:javascript
复制
RewriteEngine On
RewriteCond %{HTTP_HOST} !=www.example.com
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

在此之后,添加:

代码语言:javascript
复制
RewriteCond %{HTTP_HOST} =www.example.com
RewriteRule ^(.*)$ index.php?path=$1 [QSA]

与你已经拥有的非常相似,除了:

  • 删除最后一条规则中不必要的标志
  • 在第二条规则中添加对主机的检查
  • 删除.htaccess文件中不属于匹配项的第二条规则中替换时的斜杠
  • 稍微更改一下RewriteCond检查,包括重定向任何不是www.example.com而不仅仅是example.com的东西。我建议指向ww.example.com和类似于您的站点,这样的拼写错误就会被重定向(就我个人而言,我只是在大多数情况下将*.example.com指向我的站点)。

告诉我有什么问题。

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

https://stackoverflow.com/questions/41970064

复制
相关文章

相似问题

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