htaccess xampp - 将请求重定向到特定目录(许多条件)

Posted

技术标签:

【中文标题】htaccess xampp - 将请求重定向到特定目录(许多条件)【英文标题】:htaccess xampp - Redirect request to specific directory (many conditions) 【发布时间】:2014-10-17 06:35:43 【问题描述】:

我正在开发一种大规模虚拟主机应用程序,所以我需要以下东西:

htaccess 文档的顶部:

RewriteEngine On
RewriteCond %ENV:REDIRECT_STATUS ^$

我在本地运行 XAMPP,所以我编辑了我的 etc/hosts 以测试请求。

1º检测主机名并重写到主机内的文件夹:

所以,按照上面的代码,我添加了这个并且它可以正常工作(正如我测试的那样):

RewriteCond %HTTP_HOST www\.?.*\..*
RewriteRule .* %2/$1 [NC,QSA,L]

当我键入 whatever.com(如果它存在于主机上并且 /opt/lampp/htdocs/whatever.com 上有一个文件夹)时,浏览器按规定进入 whatever.com /p>

2º(问题)

说明:我需要像 whatever.com/admin 这样的请求进入名为 /opt/lampp/htdocs/admin 的其他目录并将主机名作为 GET 参数传递,因此 whatever.com/admin 内部变成 localhost/admin/?domain=whatever.com

正如您所料,我得到 404 和 500 却没有找到解决方案。

我认为可以在伪代码中添加更多重写条件。整个文件如下

RewriteCond %HTTP_HOST www\.?.*\..*
RewriteRule .* %2/$1 [NC,QSA,L]
RewriteRule admin\/.*\.(!js|!css|php) /admin/?domain=%2 [NC,QSA,L] #redirect all request least the css and js files.

非常感谢。

对不起我的英语。这里的教育系统很烂。

【问题讨论】:

【参考方案1】:

将此代码放入您的 htaccess(必须在根文件夹中)

RewriteEngine On
RewriteBase /

RewriteCond %HTTP_HOST ^(?:www\.)?(.+)$ [NC]
RewriteCond %REQUEST_URI !^/admin/? [NC]
RewriteRule ^(.*)$ %1/$1 [L,QSA,NC]

RewriteCond %HTTP_HOST ^(?:www\.)?(.+)$ [NC]
RewriteRule ^admin/?$ admin/?domain=%1 [L,QSA,NC]

【讨论】:

我为这个“RewriteCond %ENV:REDIRECT_STATUS ^$”更改了这个“RewriteBase /”,它可以工作,但是,它没有 100% 回答,抱歉,如果我没有很好地解释。我还需要不要重写 css 和 js 文件。 即使我在浏览器“hostname.com/admin/post_list.php”中输入这个也不起作用,当我将地址写入另一个位置时,它会输出 404,而不是管理员/ 我刚刚用其他文件解决了请求的问题:RewriteRule ^admin/(.*\.php)?$ BACKEND-PHP/$1?domain=%1 [L,QSA,NC]但我也需要css和js不要得到404。(css和js文件有一个相对路径,这不是强制性的)【参考方案2】:

解决方案,我必须对此进行更多测试,但我认为已解决。非常感谢 Justin Iurman 的帮助。

我当然添加到 rwrule RewriteRule ^admin/(.*)?$ BACKEND-PHP/$1?domain=%1 [L,QSA,NC ] 以重写所有文件。

所以 htaccess 看起来如下:

RewriteEngine On
RewriteCond %ENV:REDIRECT_STATUS ^$

RewriteCond %HTTP_HOST ^(?:www\.)?(.+)$ [NC]
RewriteCond %REQUEST_URI !^/admin? [NC]
RewriteRule ^(.*)$ %1/$1 [L,QSA,NC]

RewriteCond %HTTP_HOST ^(?:www\.)?(.+)$ [NC]
RewriteRule ^admin/(.*)?$ BACKEND-PHP/$1?domain=%1 [L,QSA,NC]

如果请求看起来像 http://whatever.com/admin/ANYSCRIPT_OR_VOID 它会如何发送到 localhost/BACKEND-PHP/ANYSCRIPT OR VOID?domain=whatever.com

css 和 js 文件也可以正常工作。

【讨论】:

以上是关于htaccess xampp - 将请求重定向到特定目录(许多条件)的主要内容,如果未能解决你的问题,请参考以下文章

htaccess:将所有请求重定向到不同的域(不带查询参数)

使用 htaccess 将请求 uri 重定向到镜像站点

htaccess 将所有请求重定向到 index.php,子文件夹除外

将请求从一个文件夹重定向到htaccess中的另一个文件夹

.htaccess 重定向 .php 和 .html 请求

配置 htaccess 以直接访问 CSS 和 JS 文件,但将所有其他请求重定向到索引文件 [重复]