【问题标题】:URL Rewritng is working but auto redirect is not for my websiteURL 重写工作,但自动重定向不适用于我的网站
【发布时间】:2021-08-25 05:18:50
【问题描述】:

我使用 .htaccess 和下面的代码重写 URL。问题是,如果我们粘贴 URL,那么它可以工作,但自动重定向不起作用。

.HTACCESS 代码:

Options +FollowSymLinks

RewriteEngine on

RewriteRule Sports-Equipment-Catname-(.*)\.html$ Sports-Equipment.php?Catname=$1 

我的网址:

http://example.com/Sports-Equipment.php?Catname=Discus

如果我从 htaccess 粘贴直接 URL 是:

http://example.com/Sports-Equipment-Catname-Discus.html

为什么 URL 不会自动重定向到新页面。

请帮我解决它。

【问题讨论】:

  • 好吧,您的配置中没有重定向规则。所以不执行重定向也就不足为奇了。
  • @arkascha 你能帮我修一下吗。
  • 我认为首先确定您想要实现的实际目标是有意义的...它真的是您想要应用的重定向吗?为什么?这在我看来毫无意义。或者这是一个词的混乱?我想说你应该描述你想要实现的目标,而不是如何你想要实现它......

标签: php .htaccess mod-rewrite


【解决方案1】:

为什么 URL 不会自动重定向到新页面。

这里没有“自动”过程。您没有实现重定向的指令。

我的网址:/Sports-Equipment.php?Catname=Discus

这就是问题所在,您需要更改 HTML 源代码中的实际 URL。这不应该通过“重定向”来解决。否则,用户在单击链接之前仍然可以“看到”旧 URL。如果他们复制链接,他们就是在复制“旧”URL。每次用户单击链接时,他们都会被重定向 - 这很慢,不仅对用户而言,而且对您的服务器而言(使用更多资源)。

但是,如果您要更改现有的 URL 结构,则应该实施重定向。但这只是为了保留 SEO。适用于已将旧 URL 编入索引的搜索引擎以及指向旧 URL 的第三方反向链接。

为此,您需要在现有重写之前添加以下“重定向”。例如:

# Redirect "old" URL to "new" URL
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^Catname=([^&]*)
RewriteRule ^Sports-Equipment\.php$ /Sports-Equipment-Catname-%1.html [QSD,R=301,L]

检查REDIRECT_STATUS env var 的条件确保我们只重定向直接请求,而不是通过稍后的重写来重写请求 - 从而避免重定向循环。

QSD 标志从初始请求中丢弃查询字符串。

【讨论】:

  • MrWhite,感谢您的大力帮助。这现在是自动重定向的,但现在我的页面无法正常工作。他们正在显示 4O4 错误页面。您对如何修复它有任何建议。
  • @VinexSports 我假设您的网址(例如http://example.com/Sports-Equipment-Catname-Discus.html)正在使用您问题中的指令?
猜你喜欢
  • 2016-07-27
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 2019-04-08
相关资源
最近更新 更多