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


Redirecting all php file and error document to index.php except request of stylesheet, images, java script, ajax

这个问题很常见,我也搜索并尝试了很多答案,但我没有找到一个合适的格式来解决我的问题。

我想要什么

  1. 重定向所有错误文档(即任何未找到的文件或目录请求应重定向到根文件,在我的情况下- index.php)

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

domain.com/directory_request/file_request

则应作为

处理

domain.com/index.php ?目录= directory_request&文件= file_request

和类似

的请求

domain.com/directory_request1/directory_request2/file_request

则应作为

处理

domain.com/index.php ?目录= directory_request1-directory_request2&文件= file_request

    所有的图片,css, javascript,文件不应该重定向到根文件。还有一件事,我希望所有不存在的css,图像等也应该重定向到根文件。

总之,所有请求的url都应该重定向到根文件index.php的参数,如前面第2点所述的请求,除了所有现有的图像javascript, css请求。

我希望我能说清楚我的观点。

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

像这样一个简单的规则可以是(在你的。htaccess文件或httpd.conf):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

RewriteCond告诉Apache只在请求的文件名不是实际文件时才运行RewriteRule

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

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

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

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