将所有php文件和错误文件重定向到index.php,除了样式表,图像,java脚本,ajax的请求

时间:2013-01-07 15:54:16

标签: php .htaccess mod-rewrite

这个问题很常见,我也搜索并尝试了许多回答,但我没有得到一个可以解决我问题的正确格式。

我想要什么。

  1. 重定向所有错误文档(即任何未找到的文件或目录请求都应重定向到我的案例中的根文件 - index.php)

  2. 将所有页面请求重定向到根文件(index.php)作为参数,即if 有人输入一个像

  3. 这样的网址

    domain.com/directory_request/file_request

    那么它应该被视为

    domain.com/index.php?directory=directory_request&file=file_request

    并请求

    domain.com/directory_request1/directory_request2/file_request

    那么它应该被视为

    domain.com/index.php?directory=directory_request1-directory_request2&file=file_request

    1. 不应将所有图片,CSS,javascript,文件重定向到根文件。 还有一件事我想要所有不存在的css,图像等也应该重定向到根文件。
    2. 简而言之,所有请求的网址都应该重定向到根文件index.php,其参数与前面第2点中描述的请求相同,除了所有现有图像javascript,css请求。

      我希望我明白我的观点。

      提前致谢。

2 个答案:

答案 0 :(得分:3)

通常,在这种情况下,最好将所有请求定向到前端控制器并解析该文件内的$_SERVER['REQUEST_URI']。这允许您将所有规则和解析保存在一个位置(而不是解析.htaccess中的URL和前端控制器中的路由请求)。

这样的简单规则可能是(在.htaccess文件或httpd.conf中):

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

如果请求的文件名不是实际文件,RewriteCond告诉Apache只运行RewriteRule

答案 1 :(得分:2)

最好使用RewriteCond来检查所请求的目录/文件是否存在。

RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} !-f

然后您可以在每个规则前使用这些规则。为了得到它你想要的,你可以像这样使用尽可能多的规则:

RewriteRule ^(.*)/(.*)$ index.php?directory=$1&file=$2