我有一个.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>