0

我在 RHEL6 上使用 WordPress,并进行了一些重写,以便 CSS 托管在http://servername/css而不是http://servername/wp-content/themes/themename/css/.

我正在从 Nginx 安装转移到 Apache,并拥有服务器。在这种情况下,我不想使用 htaccess 进行重定向,我只想将它们放在 httpd.conf 中。如果我启用 htaccess 并将其放在那里,一切似乎都可以正常工作。

在我的转换中,我在规则的开头添加了 /。下面的当前代码适用于所有内容,除了未由 css、js、img、字体规则处理的真实文件。例如,实际上托管在 /assets 或其他目录下的东西。我有一种感觉,这是由于 REQUEST_FILENAME,如果有的话,下一条规则缺少斜线 - 但我似乎无法弄清楚。

RewriteRule ^/index\.php$ - [L]
RewriteRule ^/css/(.*) /wp-content/themes/themename/css/$1 [QSA,L]
RewriteRule ^/js/(.*) /wp-content/themes/themename/js/$1 [QSA,L]
RewriteRule ^/img/(.*) /wp-content/themes/themename/img/$1 [QSA,L]
RewriteRule ^/font/(.*) /wp-content/themes/themename/font/$1 [QSA,L]
RewriteRule ^/plugins/(.*) /wp-content/plugins/$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

如果我尝试访问http://servername/assets/image.png,我实际上正在从重写日志重写到 /index.php

init rewrite engine with requested uri /assets/311.jpg
applying pattern '^/index\.php$' to uri '/assets/311.jpg'
applying pattern '^/css/(.*)' to uri '/assets/311.jpg'
applying pattern '^/js/(.*)' to uri '/assets/311.jpg'
applying pattern '^/img/(.*)' to uri '/assets/311.jpg'
applying pattern '^/font/(.*)' to uri '/assets/311.jpg'
applying pattern '^/plugins/(.*)' to uri '/assets/311.jpg'
applying pattern '.' to uri '/assets/311.jpg'
RewriteCond: input='/assets/311.jpg' pattern='!-f' => matched
RewriteCond: input='/assets/311.jpg' pattern='!-d' => matched
rewrite '/assets/311.jpg' -> '/index.php'

/assets是具有真实图像的真实文件夹。通过查看此日志,我会认为!-f应该说“是的,这是一个文件”,而不是之后将其传递给 index.php。

4

1 回答 1

1

经过一番研究和测试,我发现这很容易与 htaccess 和 httpd.conf 的范围不同有关,需要包含DOCUMENT_ROOT

如果你在 /var/www/html/test/ 中使用 htaccess,你只会在 /test 中查看,因此像 test/assets/image.jpg 这样的东西会通过,因为 /assets/image.jpg 是有效的。

但是,在 httpd.conf 的情况下,除非您在 Directory 指令中使用这些规则,否则您不会被引导到虚拟主机文件夹。因此,就我而言,它正在从服务器的根目录中寻找 /assets/image.jpg。

为了解决这个问题,我只需要包含%{DOCUMENT_ROOT}before %{REQUEST_FILENAME}

我在 httpd.conf 中的最后一个块看起来像:

RewriteRule ^/index\.php$ - [L]
RewriteRule ^/css/(.*) /wp-content/themes/themename/css/$1 [QSA,L]
RewriteRule ^/js/(.*) /wp-content/themes/themename/js/$1 [QSA,L]
RewriteRule ^/img/(.*) /wp-content/themes/themename/img/$1 [QSA,L]
RewriteRule ^/font/(.*) /wp-content/themes/themename/font/$1 [QSA,L]
RewriteRule ^/plugins/(.*) /wp-content/plugins/$1 [QSA,L]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
于 2013-01-02T16:40:57.957 回答