我已经更改了我网站的根目录 - 是否可以创建htaccess,它会将所有内容重定向到新的根目录(如所有锚点,标题等)?
我尝试过这样的事情:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://localhost/root/index.php [R=301,L]
但它只在我打开localhost /时重定向到新文件夹,否则如果我点击一个锚,它就不会重定向到任何地方。
这是我想要实现的目标:
锚点是: localhost / user
我想将其重定向到: localhost / root / user
答案 0 :(得分:0)
我认为您必须删除协议和域。尝试
RewriteRule(。*)/ root / index.php [R = 301,L]
或者
RewriteRule(。*)http:/root/index.php [R = 301,L]
答案 1 :(得分:0)
它仍然不会重定向图像等内容,但我想如果不更改每个标记中的src路径,我就无法做到这一点,对吗?
RewriteRule (.*) /root/$1 [R=301,L]
你知道,$1
中有RewriteCond %{REQUEST_URI} !^/root/
引用括号在模式中捕获的内容。因此,任何和所有URI都会重定向到根文件夹中的等效项。这也适用于子文件夹,一切(“img / something.jpg” - >“root / img / something.jpg”)。
但是,仅此规则会导致无限循环,因为重定向的URL现在将被重写。例如:请求来自/index.html,重定向到/root/index.html,但随后又被捕获,并重定向到/root/root/index.html ...所以为了解决这个问题,我们应该引入一个RewriteCond ,像
RedirectMatch ^/(?!root/)(.*) /root/$2
这意味着:“如果请求的URI不以'/ root /'开头”。这些应该让你开始。
另一种可能更经济的重定向方式是使用RedirectMatch directive,但正则表达式更麻烦,因为它需要包含重写的URL不应该以'root开头的条件'(避免重定向循环)。我现在无法测试,但是
(?!root)
可能会成功。 ({{1}}位是negative lookahead,当然这样的模式也可以在rewriteRule中使用。)