Maskowanie wp-content / themes / name / images do katalogu tylko obrazów za pomocą htaccess

10

Próbuję czegoś, co moim zdaniem byłoby naprawdę proste, aby ukryć mój adres URL, ale wydaje się, że nie działa. Chcę mieć możliwość linkowania do obrazów w moim tagu img bez konieczności wpisywania pełnego adresu URL.

to znaczy

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

Jednak na moich stronach chcę to po prostu zrobić

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

Wydaje się jednak, że nic nie działa na moim komputerze lokalnym. Korzystam z serwera Apache na komputerze z systemem Windows 7. Próbuję użyć .htaccess, aby zrobić to, o czym wspomniałem powyżej. Oto mój plik .htaccess w katalogu głównym mojej witryny.

AKTUALIZACJA: Próbowałem poniżej sugestii ZweiBlumen, ale to nie działało. Następnie wypróbowałem sugestię Geertsa i dodałem metodę ponownego zapisu do misc.php mojego folderu administracyjnego. Potem poszedłem na stronę permalinks i nacisnąłem save. Wynik tego oznaczał, że mój folder .htaccess został przepisany, a wygenerowane przez niego dane wyjściowe znajdują się poniżej.

# 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

Jednak nadal nie mogę przejść do folderu obrazów, takiego jak:

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

Dostaję tylko stronę, której nie znaleziono. Sugestia Joshua działała idealnie, ale mam nadzieję, że użyję tego w połączeniu z maskowaniem adresu URL zdjęć.

Czy jest coś jeszcze, co mogę robić źle, lub powinienem to sprawdzić?

AKTUALIZACJA:

Dla każdego, kto to czyta, właśnie spróbowałem ponownie i zadziałało to przy użyciu kombinacji metod Geertsa i Joshuasa. Wygląda na to, że moja przeglądarka Firefox buforuje stronę, co spowodowało, że pomyślałem, że tak nie jest.

Powodem, dla którego zdecydowałem się na umieszczenie go w pliku .htaccess, jest to, że plik ten jest nadpisywany za każdym razem, gdy wchodzę na stronę administracyjną permalinks, więc nie chcę tego nadpisywać przez przypadek. Chyba mógłbym to jakoś wyłączyć, ale nie jestem pewien, jak to zrobić. Wszystkie trzy odpowiedzi w pewnym stopniu pomogły.

dreza
źródło

Odpowiedzi:

10

Sprawdź motyw Roots WordPress . Wydaje się, że robią dokładnie to, co chcesz z adresami URL.

Oto fragment kodu źródłowego z pliku root -htaccess.php pliku :

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;
}

Uwaga: jeśli możesz pobrać to bezpośrednio w .htaccesspliku, jak w odpowiedzi ZweiBlumen, powinieneś wybrać to rozwiązanie, ponieważ najprawdopodobniej jest ono bardziej zoptymalizowane.

Geert
źródło
1
Chociaż nie do końca to, czego szukałem tej metody, ostatecznie po zapisaniu umieściłem reguły w .htaccess za pośrednictwem strony permalinks admin. Skończyłem używać tej metody w połączeniu z metodą Joshuasa i działa ona doskonale. Dzięki za pomoc.
dreza
Fajnie, jeśli chodzi o wydajność, dobrze jest, aby umieścili też przepisywania w pliku .htaccess.
Geert
Sądzę, że ta metoda jest całkowicie w porządku w porównaniu do twardego kodowania ich w twoim .htaccess. Ponieważ tutaj możesz również zarządzać nim w oparciu o funkcje motywu. Php i w razie potrzeby wyłącz te reguły.
Jake
To właściwie najlepsza metoda dla Wordpress. Reguły WP Rewrite są generowane tylko podczas aktualizacji struktury permalinks, więc to, co tu robisz, to w zasadzie zapisywanie go w twoim .htaccess; choć w bardziej przystępny sposób, jak mówi Jake.
pospi
1
Prawdopodobnie nie powinny być wp-content/themeszakodowane na stałe, ponieważ są ruchomymi celami. global $wp_theme_directoriesmoże być używany do przechodzenia przez wszystkie zarejestrowane katalogi motywów i identyfikowania aktualnie aktywnego motywu. I WP_CONTENT_DIRmoże być użyty do uzyskania define()nazwy ed zawartości reż. W każdym razie +1 dla tej odpowiedzi.
kaiser
6

Jeśli problem dotyczy tylko obrazów, ale nie css lub javascript, myślę, że w Twojej RewriteRule jest literówka. Myślę, że brakuje ci „1” po „$”:

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

Możesz także spróbować umieścić te dodatkowe instrukcje poniżej początkowej reguły, tj. Poniżej tego wiersza:

RewriteRule ^index\.php$ - [L]

Nie jestem pewien.

ZweiBlumen
źródło
pieprzy nie widziałem tego. Dzięki, spróbuję.
dreza
4

Dlaczego nie utworzysz dla niego krótkiego kodu w następujący sposób?

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

A następnie użyj następującego skrótu w dowolnym miejscu w obszarze zawartości.

[img_folder]/img.jpg
<img src="[img_folder]/img.jpg" alt="img" />
Joshua Abenazer
źródło
hmmm, podoba mi się możliwość korzystania z [img_folder] w obszarze zawartości, chociaż tak naprawdę chciałem tylko, aby URL / images nie był odsłonięty. Mogę jednak spojrzeć na połączenie tego z odpowiedzią Geerta i ZweiBlumens, jeśli je uruchomię.
dreza