Apache 2.4转换.htaccess重写为vhost.conf

我有一个.htaccess重写,我想移动到一个vhost.conf(我不想使用.htaccess)

RewriteRule ^(.*?)(test_mod_rewrite) /$1media/plg_jchoptimize/assets/modrewrite.php?q=$2 RewriteRule ^(.*?)(gz|nz)/([^/]+)/([^/]+)/([^/]+)\.(js|css)$ /$1media/plg_jchoptimize/assets/jscss.php?f=$5&type=$6&gz=$2&d=$3&i=$4 

假设我已经启用了适当的模块,并满足了先决条件(RewriteEngine On等),需要进行哪些更改才能使此规则在vhost.conf文件中工作?

RewriteRules(假设你的RewriteEngine也设置好了)在.htaccess文件和虚拟主机configuration中都能很好地工作。 唯一的区别是它在每个服务器上下文中工作,而不是在你的vhostconfiguration中的每个目录,这意味着像“foo”这样的URL匹配现在是“/ foo”而不是(注意在开始时添加的正斜杠这是大多数人忘记的)。 此外,在每个服务器上下文中,所得到的path可以是完整的文件系统path,而不仅仅是相对URI。

RewriteRule foo.bar baz.abc现在变成了RewriteRule /foo.bar baz.abc

系统计算出是否要让它使用创build文件系统path的重写或相对URI是通过检查文件系统的结果的第一位。 因此,如果您将/ foo重写为/ home / foo,并且/ home存在于您的文件系统上,则它将被视为文件系统重写,而不仅仅是相对URI重写。

假设你的文件系统上有/ home但不是/ img,那么:

RewriteRule /index.html /home/jane/index.html < – 文件系统path重写(/ home存在于文件系统上)

RewriteRule /index.html /img/index.html < – 相对重写(/ img文件系统上不存在,所以youdomain / img / index.html是结果)

我希望这回答了你的问题

问题与另一个块外的重写规则有关。

对于历史 – 这是有效的。 更改目录以适应。

 <Directory /var/www/site/public_html/media/plg_jchoptimize/assets/> RewriteEngine On RewriteRule ^(.*?)(test_mod_rewrite) /$1media/plg_jchoptimize/assets/modrewrite.php?q=$2 RewriteRule ^(.*?)(gz|nz)/([^/]+)/([^/]+)/([^/]+)\.(js|css)$ /$1media/plg_jchoptimize/assets/jscss.php?f=$5&type=$6&gz=$2&d=$3&i=$4 Require all granted </Directory>