Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写WordPress主题文件,将所有内容重定向到httpd.conf中的index.php_Wordpress_Apache_.htaccess_Mod Rewrite_Httpd.conf - Fatal编程技术网

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

重写WordPress主题文件,将所有内容重定向到httpd.conf中的index.php,wordpress,apache,.htaccess,mod-rewrite,httpd.conf,Wordpress,Apache,.htaccess,Mod Rewrite,Httpd.conf,我在RHEL6上使用WordPress,并进行了一些重写,以便CSS托管在http://servername/css而不是http://servername/wp-content/themes/themename/css/ 我正在从Nginx安装迁移到Apache,并拥有服务器。在这种情况下,我不想使用htaccess进行重定向,我只希望它们位于httpd.conf中。如果我启用htaccess并把它放在那里,一切看起来都很好 在转换过程中,我在规则的开头添加了/。下面的当前代码适用于所有内容,

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

我正在从Nginx安装迁移到Apache,并拥有服务器。在这种情况下,我不想使用htaccess进行重定向,我只希望它们位于httpd.conf中。如果我启用htaccess并把它放在那里,一切看起来都很好

在转换过程中,我在规则的开头添加了/。下面的当前代码适用于所有内容,除了css、js、img和字体规则无法处理的真实文件。与中一样,实际上托管在/assets或其他目录下的内容。我有一种感觉,这是由于请求的文件名,如果有什么的话,下一个规则缺少一个斜杠-但我似乎无法找到它

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\u ROOT

如果您在/var/www/html/test/中使用htaccess,您将只在/test中查找,因此类似test/assets/image.jpg的内容将通过,因为/assets/image.jpg是有效的

但是,在httpd.conf的情况下,除非您在目录指令中使用这些规则,否则您不会被路由到虚拟主机文件夹。所以在我的例子中,它在服务器的根目录下查找/assets/image.jpg

为了解决这个问题,我只需要在
%{REQUEST\u FILENAME}
之前加入
%{DOCUMENT\u 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]

也许我遗漏了什么,但是你的规则只适用于
css
js
img
font
插件。我没有看到
资产的任何规则
没有-/assets是一个包含文件的真实目录。我原以为请求文件名会被认为是一个真实的文件并被忽略,而不是发送到index.php,但不确定这里发生了什么。尝试在顶部添加
RewriteRule^/assets/-[L]
,但这不仅仅是assets目录。它是css、js、img规则没有涵盖的任何静态文件。我提供的规则有效吗?