重写WordPress主题文件将所有内容重定向到httpd.conf中的index.php



我在rhel6上使用WordPress,并具有一些重写,因此CSS托管在http://servername/css而不是http://servername/wp-content/themes/themename/css/

我正在从nginx安装到apache,并拥有服务器。在这种情况下,我不想将HTACCESS用于重定向,我只希望它们在httpd.conf中。如果我启用HTACCESS并将其放入其中,一切似乎都很好。

在转换中,我在规则开始时添加了/。下面的当前代码适用于所有内容,除了CSS,JS,IMG,字体规则未处理的真实文件外。如在中,实际托管在/资产或其他目录下的事物。我觉得这是由于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。

进行了一些研究和测试后,我发现这很容易与htaccess和httpd.conf之间的范围差异有关,并且需要包括 DOCUMENT_ROOT

如果您在/var/www/html/test/中使用htaccess,则只会在/test/test中,因此test/assets/image.jpg之类的东西会通过,因为/assets/image.jpg是有效的。

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

要解决这个问题,我只需要在%{REQUEST_FILENAME}之前包括%{DOCUMENT_ROOT}

我在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]

最新更新