我想将所有请求重定向到website.ext到website2.ext,除非有人访问website.ext / specific_dir(或者某个“在”特定目录下“,如web.ext / specific_dir / controller / action)
我如何在.htaccess中完成这样的事情?
非常感谢
答案 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_dir
或GOOD_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]