【问题标题】:Renaming and redirecting pages fails in htaccess在 htaccess 中重命名和重定向页面失败
【发布时间】:2015-03-21 06:39:00
【问题描述】:

我很抱歉问这个问题,因为答案似乎很简单。然而,经过三个小时的反复试验,我毫无头绪。

我在网站上有几个页面使用 url 中的参数。我想将其更改为更常规的网址。示例:

domain.com/pag.php?id=1-awesome-page 应该变成 domain.com/awesome-page

到目前为止一切顺利,但到目前为止我遇到了三个问题。 1. 旧页面仍然可以访问,谷歌会将其作为重复内容进行索引。当我尝试重定向它时,我收到了无限循环错误。 2. 无论出于何种原因,有时某些图像(直接来自内容)会在新命名的页面上被删除。我尝试使用 base-url 并重命名图像和 url,但到目前为止还没有。 3. 重定向也不关心我是输入 id=1-awesome-page 还是 id=2-worthless-page。全部重定向到第一个。

在我尝试过的事情中。

RewriteCond %{QUERY_STRING} id=1-awesome-page
RewriteRule ^pag\.php$ /awesome-page? [L,R=301]
RewriteRule  ^awesome-page?$     pag\.php?id=1  [NC]

【问题讨论】:

  • 您是否在更改.htaccess 后删除该页面的浏览器缓存,即旧网址仍然可以访问的原因可能是因为您的浏览器正在“记住”它?跨度>
  • 我尝试关闭并重新打开浏览器和旧的 CTRL+F5 但这没有帮助。
  • 这是一个“硬”重载。要清除 chrome 上的缓存(仅针对您正在处理的那个页面)打开开发者工具,然后单击并按住重新加载按钮,直到出现清除缓存的选项 - 这将清除缓存 - 。

标签: .htaccess mod-rewrite redirect


【解决方案1】:

您想要做的事情并不能真正用 mod_rewrite 完成,除非您想为每个页面制定规则,这可能会大大降低您的网站速度。这是因为您无法凭空召唤1-awesome-page 中的1,并且您的pag.php 页面似乎无法仅根据其seo 名称加载该页面。如果您需要使用该号码,则需要在您的网址中的某处包含该号码。

至于你的问题:

您提到的错误无法在您的 .htaccess 的当前迭代中重现。您之前可能有一个无限循环,并且由于您使用R=301 进行测试,浏览器将缓存此重定向,并且仅在您请求第一个资源时才请求第二个资源。您应该使用[R,L] 进行测试,并且只有在一切正常时才更改为[R=301,L]。不这样做会导致奇怪的行为,以及您对 .htaccess 的预期之外的行为。

当您有一个 url a 和一个 url b,并且想要将 a 重定向到 b,并且想要在内部将 b 重写为 a,您需要确保任何给定的时间不是两个规则都可以匹配。您可以使用%{THE_REQUEST} 技巧或使用END 标志。两者都在this answer 中进行了概述。

如果您在制作精美的 url 后遇到页面上的资源无法加载的问题,您可能使用了相对 url。 This question 概述了如何解决此问题的可能性。您可以将网址设为绝对或相对于您网站的根目录,或者使用<base href="/">


以下内容适用于 /pag.php?id=123-news-page/news/123/news-page

RewriteCond %{THE_REQUEST} pag\.php\?.*id=([^-]+)-([^&\s]+)
RewriteRule ^pag\.php$ /news/%1/%2? [L,R]
RewriteRule  ^news/([^/]+)/([^/]+)/?$ pag.php?id=$1-$2 [L]

【讨论】:

  • 感谢您的帮助和解释。我试过这个,但无论我打开什么页面,它们都显示第一个页面的内容。图像 / css / 等也不起作用。
  • 它可能有几个原因:您有更多规则,其中一个导致了这种行为。您之前尝试过永久重定向,这会导致浏览器缓存结果。在这种情况下,请尝试使用您未用于测试的其他浏览器。您正在使用一个框架,该框架会查看地址栏中的 url,而不是重写的 url。例如,wordpress 就是这种情况。如果可能是这种情况,请阅读您的框架的文档。
  • 感谢您的快速回复。我清除了所有规则,除了您发送的规则。我尝试了不同的浏览器。图像现在似乎可以正常工作,无论出于何种原因,CSS 仍然无法正常工作。我正在使用一个自定义框架,该框架确实依赖于从 URL 获取 ID(示例中的 1)。我将尝试根据重写的 url 提供 ID。
  • 我的坏 Sumurai,获取 ID 太可怕了。很久以前做的。 CSS仍然无法正常工作,但我放弃了。我只是链接了整个 URL,它就完成了。感谢您的帮助,干杯!
  • Sumurai8 很抱歉一直打扰您。但是,如果我想去掉 URL 中的“新闻”和 ID (int),我该怎么办。我尝试从您的代码中删除“news/”,这似乎有效,但是,无论出于何种原因,所有图像也会消失。我什至没有接近删除的号码(ID)。虽然它是安全的。该站点是静态的,我只想重命名大约 10 个页面,现在就是这样。不会添加新页面。
猜你喜欢
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 2023-03-04
  • 2016-06-04
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多