【问题标题】:Using jQuery.load() with mod_rewrite将 jQuery.load() 与 mod_rewrite 一起使用
【发布时间】:2013-10-25 04:29:43
【问题描述】:

我正在使用 mod_rewrite 来获取 SEO 友好的 URL

RewriteEngine on
RewriteBase /
RewriteRule ^([^/\.]+)/?$ /page.php?page=$1 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ /page.php?page=$1&sub=$2 [L]

所以我可以加载http://foo.com/food/local。效果很好,但它会加载整个页面,并且客户端希望添加一个在页面加载期间持续存在的流播放器。

所以我试图切换到使用 jQuery.load() 加载所有内容

<script>
   $(".ajax").click( function(e) { 
        e.preventDefault();
        $('#contentMain').load( $(this).attr("href"), function() {console.log( "Load was performed." ); });
    });         
</script>

我可以将整个页面加载到#contentMain,但我对如何在加载仅交换内容的剥离版本的 PHP 时维护 SEO URL 感到困惑。

例如,来到http://foo.com/food/local 将加载整个页面,但单击来自http://foo.com/food/local 的href /food/foreign 链接不会按mod_rewrite 访问page.php,而只是使用相同的args 轮询content.php?我应该重建 page.php 以某种方式识别上下文吗?

此外,当使用此方法时,您是否会通过 AJAX 更新元描述和标题?或者只要http://foo.com/food/local 可以被抓取并拥有正确的元信息就没有关系?

【问题讨论】:

  • 您应该让您的所有链接保持完整并链接到页面。然后使用 jQuery 你“捕捉”这些链接的点击事件并重新加载内容(也许使用 javascript 在地址栏中设置 URL)。这是最好的解决方案,因为如果用户没有启用 javascript,它也可以工作
  • 在php中,检测请求是否为ajax请求。如果是,则返回精简版,否则,返回完整版。 davidwalsh.name/detect-ajax
  • @KevinB 多么棒的资源!这让我的生活变得更轻松了!

标签: php .htaccess jquery mod-rewrite


【解决方案1】:

如果是 ajax 调用,为什么不直接访问非好友 page.php 链接?它应该仍然可以访问。您可以使用页面链接向您的 href 添加数据属性:

<a href="/food/local/" data-ajax="page.php?page=$1">Local Food</a>

无论如何,只是一个想法。

【讨论】:

  • 效果很好!谢谢!您如何看待页面元信息?由于蜘蛛不会通过 AJAX 导航,您会更新还是不理会。​​span>
  • 太棒了!我不会太担心元......就像你说的蜘蛛只会抓取整个页面。也许考虑更改页面标题。你可以添加另一个数据或标题属性。
  • 即document.title = $(this).attr("title") - 在 A 标签中包含标题也有利于 SEO
猜你喜欢
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 2011-11-13
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
相关资源
最近更新 更多