0

我已经更改了我网站的根目录 - 是否可以创建 htaccess 将所有内容重定向到新的根目录(如所有锚点、标题等)?

我已经尝试过诸如:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://localhost/root/index.php [R=301,L]

但它只会在我打开 localhost/ 时重定向到新文件夹,否则如果我单击锚点,它不会重定向到任何地方。

这就是我想要实现的目标:
锚点是:localhost/user
我想将它重定向到:localhost/ root /user

4

2 回答 2

0

它仍然不会重定向图像等内容,但我想如果不更改每个标签中的 src 路径,我就无法做到这一点,对吧?

使用捕获组

RewriteRule (.*) /root/$1 [R=301,L]

您会看到,其中$1包含对模式中括号中的内容的引用。因此,任何和所有 URI 都被重定向到根文件夹中的等效项。这也适用于子文件夹,一切(“img/something.jpg”->“root/img/something.jpg”)。

但是,仅此规则就会导致无限循环,因为重定向的 URL 现在将被重写。例如:请求来自/index.html,重定向到/root/index.html,但随后又被捕获,并重定向到/root/root/index.html......所以为了处理这个问题,我们应该引入一个RewriteCond , 喜欢

RewriteCond %{REQUEST_URI} !^/root/

这意味着:“如果请求的 URI 不以 '/root/' 开头”。这些应该让你开始。


另一种可能更经济的重定向方法是使用RedirectMatch 指令,但正则表达式有点混乱,因为它需要包含重写的 URL 不应以“root”开头的条件(以避免重定向环形)。我现在无法测试这个,但类似的东西

RedirectMatch ^/(?!root/)(.*) /root/$2

可能会成功。(该(?!root)位是负前瞻,当然这种模式也可以在 rewriteRule 中使用)。

于 2012-08-30T22:02:21.913 回答
0

我认为您必须删除协议和域。尝试

RewriteRule (.*) /root/index.php [R=301,L]

或者可能

RewriteRule (.*) http://root/index.php [R=301,L]

于 2012-08-30T18:30:19.950 回答