我尝试使用别名设置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
。
答案 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
我希望这可以帮助那些遇到这个问题的人。