除特定子目录外,.htaccess重定向

时间:2014-03-09 20:35:32

标签: .htaccess redirect

我想将所有请求重定向到website.ext到website2.ext,除非有人访问website.ext / specific_dir(或者某个“在”特定目录下“,如web.ext / specific_dir / controller / action)

我如何在.htaccess中完成这样的事情?

非常感谢

2 个答案:

答案 0 :(得分:1)

您可以使用mod_rewrite ...

轻松完成此操作

我假设您要保留相同的URI并只更改域名。即。

GOOD: http://example.com/dir/file > http://example2.com/dir/file
BAD : http://example.com/dir/file > http://example2.com/

解决方案

将以下.htaccess规则添加到第一个网站的基本目录(相应地进行修改)......

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/GOOD_DIR
RewriteRule ^(.*)$ http://example2.com/$1

您可能还想添加一些标志:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/GOOD_DIR [NC]
RewriteRule ^(.*)$ http://example2.com/$1 [R=301,END]

重定向示例

以上规则将重定向以下内容:

http://exmaple.com/index.php             > http://example2.com/index.php
http://exmaple.com/file.html             > http://example2.com/file.html
http://exmaple.com/about/membership.php  > http://example2.com/about/membership.php
http://exmaple.com/code/layout.css       > http://example2.com/code/layout.css
http://exmaple.com/images/goofy.png      > http://example2.com/images/goofy.png

但不会重定向:

 http://example.com/GOOD_DIR
 http://example.com/good_dir
 http://example.com/GooD_DIr
 http://example.com/good_dir/file.html
 http://example.com/good_dir/sub_dir/other_file.php

怪癖

以上规则很简单,可能还不错。然而,他们确实带来了一些quriks ......

一些不会被重定向的怪癖:

http://example.com/good_dir.html < If a file has the same name as the dir
http://example.com/good_dir_2    < If a directory has the same start to the name

要解决此问题,您可以将正则表达式模式更新为更具体:

RewriteCond %{REQUEST_URI} !^/GOOD_DIR(/.*)?$

使用NC标志:

RewriteCond %{REQUEST_URI} !^/GOOD_DIR(/.*)?$ [NC]

标志说明

NC标志指定正则表达式模式区分大小写;换句话说,a-z的处理方式与A-Z相同(例如,good_dirGOOD_DIR都不会被重定向。)

R标志指定应将重定向发送到浏览器。 =301指定要给出的状态代码作为原因,例如:

  • 301永久移动;
  • 302未说明的原因;
  • 307临时重定向

更多信息

https://httpd.apache.org/docs/current/rewrite/flags.html
http://www.regular-expressions.info/

答案 1 :(得分:0)

得到以下不完全精确但有效:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/sub-dir.*
RewriteRule (.*) http://www.newsite.ext/ [R=301,L]