我有一个 .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 文件中发挥作用?
答案1
RewriteRules(假设您还设置了 RewriteEngine On)在 .htaccess 文件和虚拟主机配置中运行良好且几乎相同。唯一的主要区别在于,它在您的 vhost 配置中以每个服务器上下文而不是每个目录运行,这意味着 URL 匹配(如“foo”)现在改为“/foo”(请注意开头添加的正斜杠,这是大多数人忘记的)。此外,在每个服务器上下文中,结果路径可能是完整的文件系统路径,而不仅仅是相对 URI。
RewriteRule foo.bar baz.abc
现在变成RewriteRule /foo.bar baz.abc
系统通过检查结果的第一位与文件系统是否一致来确定您是要创建文件系统路径重写还是相对 URI 重写。因此,如果您将 /foo 重写为 /home/foo,并且 /home 存在于您的文件系统中,它将被视为文件系统重写,而不仅仅是相对 URI 重写。
假设你的文件系统, 然后:
RewriteRule /index.html /home/jane/index.html
<-- 文件系统路径重写(文件系统上存在/home)
RewriteRule /index.html /img/index.html
<-- 相对重写(/img 在文件系统上不存在,因此结果是 youdomain/img/index.html)
我希望这回答了你的问题
答案2
问题与块外的另一个重写规则有关。
对于历史来说 - 这是可行的。更改目录以适应。
<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>