【问题标题】:htaccess xampp - Redirect request to specific directory (many conditions)htaccess xampp - 将请求重定向到特定目录(许多条件)
【发布时间】: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.

非常感谢。

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

【问题讨论】:

    标签: apache .htaccess mod-rewrite xampp localhost


    【解决方案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 文件也可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      相关资源
      最近更新 更多