Маскировка wp-content / themes / name / images в каталог просто изображений с помощью htaccess

10

Я пытаюсь сделать что-то действительно простое, чтобы замаскировать мой URL, но не могу заставить его работать. Я хочу иметь возможность ссылаться на изображения в моем теге img без необходимости вводить полный URL-адрес.

т.е.

Current url:  http://server.com/wp-content/themes/standard/images/img.jpg
or
<img src = "http://server.com/wp-content/themes/standard/images/img.jpg" />

Однако на моих страницах я хочу просто сделать

<img src="http://server.com/images/img.jpg" />

Однако на моем локальном хосте ничего не работает. Я использую сервер Apache на компьютере с Windows 7. Я пытаюсь использовать .htaccess, чтобы сделать то, что я упомянул выше. Вот мой файл .htaccess в корне моего сайта.

ОБНОВЛЕНИЕ: я попробовал предложение ZweiBlumen ниже, но это, казалось, не работало. Затем я попробовал предложение Geerts и добавил метод перезаписи в мой misc.php моей папки администратора. Затем я перешел на страницу с постоянными ссылками и нажал «Сохранить». Результатом этого стало то, что моя папка .htaccess была переписана, и вывод был ниже.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^css/(.*) /wp-content/themes/standard/css/$1 [QSA,L]
RewriteRule ^js/(.*) /wp-content/themes/standard/js/$1 [QSA,L]
RewriteRule ^images/(.*) /wp-content/themes/standard/images/$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Однако я все еще не могу перейти к папке с изображениями, например:

http: //localhost/images/myimage.jpg .

Все, что я получаю, является страницей, не найденной. Предложение Джошуа сработало отлично, но я надеюсь использовать это в сочетании с маскировкой URL-адреса изображений.

Есть что-то еще, что я могу делать не так, или стоит проверить?

ОБНОВИТЬ:

Для тех, кто читает это, я просто попробовал еще раз, и он работал с использованием комбинации методов Гирта и Джошуаса. Мой браузер Firefox, кажется, кэшировал страницу, из-за чего я думал, что это не так.

Причина, по которой я пошел по этому поводу, поместив его в файл .htaccess, заключается в том, что этот файл перезаписывается каждый раз, когда я захожу на постоянную страницу администратора, и поэтому я не буду перезаписывать это случайно. Я думаю, я мог бы как-то отключить это, но не уверен, как это сделать. Все три ответа помогли в некоторой степени.

dreza
источник

Ответы:

10

Проверьте Корни WordPress Theme . Похоже, что они делают именно то, что вы хотите с URL.

Вот фрагмент из их файла root-htaccess.php :

add_action( 'generate_rewrite_rules', 'roots_add_rewrites' );

function roots_add_rewrites($content) {
  $theme_name = next( explode( '/themes/', get_stylesheet_directory() ) );
  global $wp_rewrite;
  $roots_new_non_wp_rules = array(
    'css/(.*)' => 'wp-content/themes/' . $theme_name . '/css/$1',
    'js/(.*)'  => 'wp-content/themes/' . $theme_name . '/js/$1',
    'img/(.*)' => 'wp-content/themes/' . $theme_name . '/img/$1',
  );
  $wp_rewrite->non_wp_rules += $roots_new_non_wp_rules;
}

Примечание: если вы можете .htaccessвыполнить это непосредственно в файле, как в ответе ZweiBlumen, вам следует выбрать это решение, поскольку оно, скорее всего, более оптимизировано.

Герт
источник
1
Хотя не совсем то, что я искал, этот метод в конечном итоге поместил правила в .htaccess через страницу постоянных ссылок администратора при сохранении. В итоге я использовал этот метод в сочетании с методом Джошуаса, и он отлично работает. Спасибо за помощь.
Дреза
Круто, для производительности хорошо, что они помещают rewriterules в .htaccess тоже.
Герт
Я думаю, что этот метод отлично подходит по сравнению с жестким кодированием их в ваш .htaccess. Потому что здесь вы также можете управлять им на основе functions.php темы и отключать эти правила при необходимости.
Джейк
На самом деле это лучший метод для Wordpress. Правила WP Rewrite генерируются только при обновлении структуры постоянных ссылок, поэтому то, что вы здесь делаете, в сущности записываете это в ваш .htaccess; хотя в более управляемой манере, как говорит Джейк.
Поспи
1
Вероятно, не должно быть wp-content/themesжестко закодировано, поскольку они движутся цели. global $wp_theme_directoriesможет использоваться для просмотра всех зарегистрированных каталогов тем и определения текущей активной темы. И WP_CONTENT_DIRможет быть использован для получения имени define()редактора содержимого dir. Во всяком случае, +1 на этот ответ.
Кайзер
6

Если проблема только в изображениях, но не в CSS или JavaScript, я думаю, что в RewriteRule есть опечатка. Я думаю, что вы пропустили "1" после "$":

RewriteRule ^images/(.*)$ wp-content/themes/standard/images/$1 [L]

Кроме того, вы можете попробовать поместить эти дополнительные операторы ниже исходного правила, то есть ниже этой строки:

RewriteRule ^index\.php$ - [L]

Не уверен, хотя.

ZweiBlumen
источник
скорлупки. не видел этого. Спасибо, я попробую.
дреза
4

Почему бы вам не создать шорткод для этого следующим образом.

function img_folder_shortcode( ) {
   return get_stylesheet_directory_uri() . '/images';
}
add_shortcode( 'img_folder', 'img_folder_shortcode' );

А затем используйте следующий шорткод в любом месте области содержимого.

[img_folder]/img.jpg
<img src="[img_folder]/img.jpg" alt="img" />
Джошуа Абеназер
источник
хммм, мне нравится возможность использовать [img_folder] в области содержимого, хотя я действительно хотел, чтобы URL / images не отображал весь wp-контент. Однако, возможно, я бы посоветовал объединить это с ответом Гирта и ZweiBlumens, если я получу.
дреза