我在这里看了很多其他的mod_rewrite问题并尝试了大部分问题,但似乎没有一个对我有用。这就是我想要做的。
将http://abc.com/foobar
等所有请求重定向至http://abc.com/
除images
和js
外,请求http://abc.com/images/foo/bar
或http://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]
条件运行良好,images
和js
文件正常加载。我认为最后一行会将其他所有内容重定向到基本域,但是当我测试它时,我仍然会收到404错误。
我不想使用像这样的规则
RewriteRule ^(.*)$ http://abc.com/ [L]
因为不同部署中的域可能不同。
我想我对这是如何工作的理解不足,但我只是遗漏了一些小事。有人可以帮我解决这个问题吗?
答案 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
。
我真的不明白为什么我必须这样做,但它可以正常工作。