将(几乎)所有请求重定向到顶级网址

时间:2012-11-28 14:24:17

标签: apache .htaccess mod-rewrite

我在这里看了很多其他的mod_rewrite问题并尝试了大部分问题,但似乎没有一个对我有用。这就是我想要做的。

  • http://abc.com/foobar等所有请求重定向至http://abc.com/

  • imagesjs外,请求http://abc.com/images/foo/barhttp://abc.com/js/foo/bar

  • 网址栏应保持不变。因此,http://abc.com/foobar加载http://abc.com/时,网址应与前者

  • 一样
  • 端口应保持不变,因此http://abc.com:8080/foobar应重定向到http://abc.com:8080

这就是我在.htaccess档案中的内容

Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(images/.*|js/.*)$
RewriteRule ^(.*)$ - [L]

条件运行良好,imagesjs文件正常加载。我认为最后一行会将其他所有内容重定向到基本域,但是当我测试它时,我仍然会收到404错误。

我不想使用像这样的规则

RewriteRule ^(.*)$ http://abc.com/ [L]

因为不同部署中的域可能不同。

我想我对这是如何工作的理解不足,但我只是遗漏了一些小事。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

这就是我最终使用的

RewriteEngine On
RewriteCond %{REQUEST_URI} !^(/*|/index.html)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[^\.]+$ index.html [L]

它并不完美,因为最后一条规则只查找没有点(。)的文件。因此,它不适用于http://abc.com/images/image.jpg,但适用于http://abc.com/images

我真的不明白为什么我必须这样做,但它可以正常工作。