Apache AliasMatch变量重定向循环

时间:2018-03-30 17:51:38

标签: regex apache mod-rewrite vhosts mod-alias

我尝试使用别名设置apache并重写规则。

我有重写设置将所有请求转发到index.php。这很有效。

我的问题是为某些特定位置设置AliasMatch。

如果客户端浏览到/core/plugins/<plugin_name>/client,我希望别名将目录映射到服务器上的/var/www/example.com/src/plugins/<plugin_name>/client

插件名称是可变的,可能存在也可能不存在。

这是我的apache vhost config:

ServerName example.com
DocumentRoot /var/www/example.com/src/public

AliasMatch ^/core/plugins/(.+)/client /var/www/example.com/src/plugins/$1/client

<Directory /var/www/example.com/src/public>
    Require all granted
    Options -Indexes

    AddDefaultCharset UTF-8

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteRule ^(.+)$ index.php?url=$1 [QSA,PT]
    RewriteBase /
</Directory>

当我浏览到/core/plugins/plugin1/client/style.css时,服务的文件理论上应该是/var/www/example.com/src/plugins/plugin1/client/style.css,但我只是得到一个重复添加/index.html的重定向循环,直到我的浏览器挂起太多的重定向。我甚至没有在我的配置中引用index.html

1 个答案:

答案 0 :(得分:0)

我能够使用以下AliasMatch规则来解决我的问题:

AliasMatch "^/core/plugins/([^\/]+)/([^\/]+)/(.*)" "/var/www/example.com/src/plugins/$1/client/$2/$3"

在我的案例中解释这是做什么的 -

用户输入:/core/plugins/plugin1/css/style.css

Alias规则的第一个参数"^/core/plugins/([^\/]+)/([^\/]+)/(.*)"检查用户输入,并将$1分配给([^\/]+)的输出,在这种情况下为plugin1,{{ 1}}到$2的输出,在这种情况下为([^\/]+)css$3,这是(.*)之后的网址中剩下的所有内容,{ {1}}在这种情况下。这些变量$2/style.css$1可用于映射第二个参数中的路径。就我而言$2

将正则表达式输出视为$3并参考第二个参数。

因此,根据用户输入"/var/www/example.com/src/plugins/$1/client/$2/$3",实际映射的文件将为/core/plugins/$1/$2/$3

我希望这可以帮助那些遇到这个问题的人。