使用htaccess将wp-content / themes / name / images屏蔽为images目录


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

但是在我的本地主机上似乎没有任何工作。我在Windows 7机器上运行Apache服务器。我正在尝试使用.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

我得到的只是一个找不到页面。约书亚(Joshua)的建议效果很好,但是我希望将其与屏蔽图像URL结合使用。

我还有其他可能做错的事情,还是应该检查?

更新:

对于阅读此书的任何人,我都再次尝试过,它结合使用了Geerts和Joshuas方法。我的Firefox浏览器似乎一直在缓存页面,这使我认为不是。

我之所以把它放到.htaccess文件中,是因为每次我进入永久链接管理页面时都会覆盖此文件,因此我不会偶然覆盖它。我想我可以以某种方式关闭此功能,但不确定如何执行此操作。这三个答案在某种程度上都有所帮助。

Answers:


10

查看Roots WordPress主题。他们似乎完全按照您想要的URL进行操作。

这是他们的roots-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
尽管不尽如人意,但最终我还是在保存时通过admin永久链接页面将规则放在.htaccess中。我最终将这种方法与Joshuas结合使用,并且效果很好。谢谢您的帮助。
dreza 2011年

太酷了,出于性能考虑,他们也将重写器也放在.htaccess中。
Geert

与将它们硬编码到您的.htaccess文件相比,我认为此方法非常好。因为在这里您还可以基于主题的functions.php对其进行管理,并在需要时关闭这些规则。
杰克

这实际上是Wordpress的最佳方法。WP Rewrite的规则仅在更新永久链接结构时生成,因此您在这里所做的实际上是将其写入.htaccess中。就像杰克所说的那样,更易于管理。
pospi

1
可能不应该使用wp-content/themes硬编码,因为它们正在移动目标。global $wp_theme_directories可用于遍历所有注册的主题目录并标识当前活动的主题。并且WP_CONTENT_DIR可以用来获取define()内容目录的ed名称。无论如何,请为此答案+1。
kaiser 2013年

6

如果问题仅在于图像而不是CSS或javascript,我认为您的RewriteRule中有错字。我认为您在“ $”之后缺少“ 1”:

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

另外,您可能希望尝试将这些多余的语句放在初始规则之下,即在此行之下:

RewriteRule ^index\.php$ - [L]

虽然不确定。


去壳。没有看到。谢谢,我去吧。
dreza 2011年

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]的能力,尽管我实际上只是想让/ images url而不是整个wp-content公开。但是,如果我愿意,可以考虑将其与Geert's和ZweiBlumens的答案结合使用。
dreza 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.