Маскування wp-content / теми / імені / зображень до каталогу лише зображень за допомогою 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, це те, що цей файл перезаписується кожного разу, коли я переходжу на сторінку адміністратора з постійними посиланнями, і тому я не хочу перезаписати це випадково. Я думаю, я міг би якось відключити це, але не знаю, як це зробити. Усі три відповіді певною мірою допомогли.

Відповіді:


10

Ознайомтеся з корінням WordPress Theme . Вони, здається, роблять саме те, що ви хочете, з URL-адресами.

Ось фрагмент з їх кореневого файлу -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 через сторінку адміністратора permalinks при збереженні. Я закінчив використовувати цей метод спільно з методом Джошуа, і він прекрасно працює. Дякую за допомогу.
— дреза

Прикольно, для виступу це добре, що вони також вкладають переписувачі до .htaccess.
— Geert

Я думаю, що цей метод ідеально чудовий порівняно з жорстким кодуванням їх у свій .htaccess. Тому що тут ви також можете керувати ним на основі теми function.php і, якщо потрібно, вимкнути ці правила.
— Джейк

Це насправді найкращий метод для Wordpress. Правила WP Rewrite генеруються лише при оновленні структури постійних посилань, тому те, що ви робите тут, це по суті записати його у свій .htaccess так чи інакше; хоча і більш керованим способом, як каже Джейк.
— pospi

1
Напевно, не повинно бути wp-content/themesжорсткого кодування, оскільки вони рухаються цілями. global $wp_theme_directoriesможе використовуватися для перегляду всіх зареєстрованих каталогів тем та визначення поточної активної теми. І WP_CONTENT_DIRможе бути використаний, щоб отримати назву define()редактора змісту. У будь-якому випадку +1 на цю відповідь.
— кайзер

6

Якщо проблема стосується лише зображень, але не css чи javascript, я думаю, що у вашому RewriteRule є помилка друку. Я думаю, що ваш пропущений "1" після "$":

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

Крім того, ви можете спробувати поставити ці додаткові заяви нижче початкового правила, тобто під цим рядком:

RewriteRule ^index\.php$ - [L]

Не впевнений, хоча.


шнурів. не бачив цього. Дякую, я піду.
— dreza

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" />

hmmm, мені подобається можливість використовувати [img_folder] в області вмісту, хоча я дійсно хотів лише, щоб URL-адреса / images не була виставлена ​​на весь wp-контент. Однак, можливо, погляньте на поєднання цього з відповіддю Геерта та ЦвейБлуменса, якщо я зроблю це.
— dreza
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.