我正在尝试访问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]
但它不起作用,有人可以帮忙吗?
答案 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: