.htaccess将所有页面重定向到主页,除了少数几个

时间:2016-07-06 10:01:04

标签: regex .htaccess redirect

我的网站只有2个子网页,我想保留,我想将所有其他子网页重定向到主页。这是我目前的htaccess代码:

# this is to disable varnish caching on my server
Header set Set-Cookie "_asomcnc=1;   max-age=900; path=/;"

RewriteEngine On

# redirect to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# redirect index.html to root
RewriteBase /
RewriteRule ^index\.html$ / [NC,R,L]

# remove trailing slash
RewriteRule ^(.*)/$ /$1 [L,R=301]

我尝试了一些我在堆栈溢出时发现的例子,但我不断获得重定向循环,或者我的css文件和图像没有加载。所以我想说我想加载这两个文件夹中的所有文件:

  • / CSS
  • /图像

我还要保留2个子页面:

  • /subpage1.html
  • /subpage2.html

其他所有内容都应该重定向到主页。

1 个答案:

答案 0 :(得分:2)

要排除页面被重写,您可以RewriteCond使用%{REQUEST_URI}或将规则链短路。

要提前退出,请在开头插入这些规则

RewriteRule ^css - [L]
RewriteRule ^images - [L]
RewriteRule ^subpage1.html$ - [L]
RewriteRule ^subpage2.html$ - [L]

然后将其他所有内容重定向到主页,除非它已经是主页,当然

RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^ / [R,L]

RewriteCond

执行相同的操作
RewriteCond %{REQUEST_URI} !^/css
RewriteCond %{REQUEST_URI} !^/images
RewriteCond %{REQUEST_URI} !^/subpage1.html$
RewriteCond %{REQUEST_URI} !^/subpage2.html$
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^ / [R,L]

这会重定向到主页,但前提是REQUEST_URI不是css而不是图片而不是subpage1.html而不是subpage2.html而且还不是主页。

如果一切正常,您可以将R替换为R=301。切勿使用R=301进行测试。