我看过其他问题,但似乎都没有解决我想做的事情。目前,我的.htaccess文件中包含以下内容,可将所有非www流量重定向到www:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
这很好用。无论文件是否存在,如果有人试图访问example.com或example.com/page-not-found,它将永久重定向到www.example.com或www.example.com/page-not-found。
我想改变网站的运行方式,让所有请求都通过特定文件路由(例如主目录中的index.php)。应该发生的事情是,如果有人前往www.example.com/any-page
,它仍会显示www.example.com/any-page
,但我会在www.example.com/index.php中处理它,以便我可以处理所有流量一个文件。我可以用以下方法做到这一点:
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重定向到www?
答案 0 :(得分:2)
是的,有。首先保持原来的规则(稍作修改,见下文):
RewriteEngine On
RewriteCond %{HTTP_HOST} !=www.example.com
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
之后,添加:
RewriteCond %{HTTP_HOST} =www.example.com
RewriteRule ^(.*)$ index.php?path=$1 [QSA]
非常类似于你已经拥有的,除了:
让我知道任何问题。