MOD_Rewrite指令用于实现catchall重定向

时间:2012-09-21 19:10:44

标签: php apache mod-rewrite

在我的网站中,有三到四种类型的URL(每种类型可以有不同的参数来表示不同的页面)。它们就像http://foo.com/users/usernamehttp://foo.com/questions/question_texthttp://foo.com/new_question等。

我使用mod_rewrite重写来自客户端的网址,即http://foo.com/users/username变为http://foo.com/users?username=username,然后此请求转到http://foo.com/users,剩下的就是http://foo.com/abracadabra

现在我想要这样,除了这3-4个预定义的模板,如果有任何其他请求,如http://foo.com/,用户应该被重定向到主页{{1}}。有没有这样的指令可以实现这个catchall重定向?

1 个答案:

答案 0 :(得分:1)

很长的路要走:

RewriteEngine On
# If the request isn't actually a file
RewriteCond %{REQUEST_FILENAME} !-f
# If the request isn't actually a directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request isn't specifically for favicon.ico (though the first 
# RewriteCond should take care of this, it's in the first .htaccess file
# I grabbed to verify)
RewriteCond %{REQUEST_URI} !=/favicon.ico
# Change the request from whatever the user entered to "/"
RewriteRule ^(.*)$ /

但你真的不应该这样做。如果您实际提供404错误和自定义错误页面(如果请求的页面不存在),则会更友好。此外,如果您这样做并且您的网站必须通过第三方安全扫描,那么您将为报告生成大量误报安全漏洞。