这个问题很常见,我也搜索并尝试了许多回答,但我没有得到一个可以解决我问题的正确格式。
我想要什么。
重定向所有错误文档(即任何未找到的文件或目录请求都应重定向到我的案例中的根文件 - index.php)
将所有页面请求重定向到根文件(index.php)作为参数,即if 有人输入一个像
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
简而言之,所有请求的网址都应该重定向到根文件index.php,其参数与前面第2点中描述的请求相同,除了所有现有图像javascript,css请求。
我希望我明白我的观点。
提前致谢。
答案 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