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のみを検索します。したがって、/assets/image.jpgが有効であるため、test / asset/image.jpgのようなものが合格します。

ただし、httpd.confの場合、Directoryディレクティブ内でこれらのルールを使用しない限り、仮想ホストフォルダーにパスされません。したがって、私の場合は、サーバーのルートから/assets/image.jpgを探していました。

これを回避するには、%{DOCUMENT_ROOT}前に含める必要がありました%{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 に答える