如何将除一个网址之外的所有网址重定向到脚本

时间:2010-08-23 20:29:41

标签: .htaccess mod-rewrite

我正在尝试访问www.example.com和www.example.com/index.html转到index.html,但我想要所有其他网址,例如www.example.com/this/is/another/link仍然可以显示www.example.com/this/is/another/link,但可以通过通用脚本进行处理。我试过了

RewriteEngine on
RewriteCond %{REQUEST_URI} !^index\.html$
RewriteCond %{REQUEST_URI} !^$
RewriteRule ^(.*)$ mygenericscript.php [L]

但它不起作用,有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

您可以改为测试资源是否存在,而不是测试%{REQUEST_URI}是什么:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* mygenericscript.php

如果您的静态资源(图片,样式表等)通过您.htaccess所在的同一目录处理,则可以防止其被重定向。

现在可能发生的事情是,当您尝试访问非//index.html的任何内容时,您会看到由无限内部重定向循环引起的内部服务器错误。这是因为.*匹配每个请求,并且在您第一次重写mygenericscript.php之后,重新处理规则集(因为mod_rewrite在您正在使用它的上下文中的工作原理在)。

答案 1 :(得分:0)

最简单的方法是安装一个404处理程序,当服务器找不到要显示的文件时执行该处理程序。

ErrorDocument 404 /mygenericscript.php

ErrorDocument 404 /cgi-bin/handler.cgi

或类似的应该做的伎俩。

并不是说RewriteRule不能用于此,只是它们设置起来很棘手并且需要深入了解apache如何处理请求。这是一种黑色艺术。

答案 2 :(得分:0)

看起来好像你正在使用PHP,你可以使用auto_x_file(x可以是append或prepend:

http://php.net/manual/en/ini.core.php