-2

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

我想要的是。

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

  2. 将所有页面请求重定向到根文件(index.php)作为参数,即如果有人输入类似的 url

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、图像等也应该重定向到根文件。

简而言之,所有请求的 url 都应重定向到根文件 index.php,其参数与前面第 2 点中描述的请求相同,但所有现有图像 javascript 、 css 请求除外。

我希望我能澄清我的观点。

提前致谢。

4

2 回答 2

3

通常,在这种情况下,最好将所有请求定向到您的前端控制器并解析该$_SERVER['REQUEST_URI']文件的内部。这使您可以将所有规则和解析保存在一个地方(与在 .htaccess 中解析 URL 和在前端控制器中路由请求相反)。

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

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

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

于 2013-01-07T15:59:17.007 回答
2

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

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

然后你可以在你的每条规则前面使用这些。要完全按照您的意愿获得它,您可以使用任意数量的规则,如下所示:

RewriteRule ^(.*)/(.*)$ index.php?directory=$1&file=$2
于 2013-01-07T16:00:41.363 回答