Маскування 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.