.htaccess重定向未重定向

oewdyzsn  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(234)

我正在尝试使用.htaccess将页面重定向到同一网站上的新位置,物理文件名为displayitems.php,但.htaccess中有一个规则

RewriteRule ^buy-online-(.*) ./displayitems.php?url=$1

这是为了处理用户朋友的URL并且工作得很好。
现在,我想重定向这些用户友好的网址到新的位置,这是在同一个网站上,例如。
redirect https://example.com/buy-online-alhabib-rings4-sku-1658906163 https://example.com/products/jewelry/buy-online-alhabib-rings4-sku-1658906163 [R=301]
redirect https://example.com/buy-online-alhabib-rings3-sku-1658906162 https://example.com/products/jewelry/buy-online-alhabib-rings3-sku-1658906162 [R=301]
redirect https://example.com/buy-online-alhabib-rings2-sku-1658906161 https://example.com/products/jewelry/buy-online-alhabib-rings2-sku-1658906161 [R=301]
redirect https://example.com/buy-online-alhabib-rings1-sku-1658906160 https://example.com/products/jewelry/buy-online-alhabib-rings1-sku-1658906160 [R=301]

这些用户友好的url没有任何扩展名,如“.php”、“.htm”等

但什么也没发生。

huwehgph

huwehgph1#

我已经在php文件中添加了这个代码来检查URL是否不包含\products\然后将其重定向到同名的新位置,对于测试,我只是用302重定向它,一旦所有测试我会将其更改为301
if (strpos($_SERVER['REQUEST_URI'], "/products/") === false) { $NewAddress = strtolower("Location:". $ini['website_address_https'] . "products/".$Product['categoriesname']."/".$Product['BrandName'].$_SERVER['REQUEST_URI']); header("$NewAddress",TRUE,302); }

qxsslcnc

qxsslcnc2#

redirect https://example.com/buy-online-alhabib-rings4-sku-1658906163 https://example.com/products/jewelry/buy-online-alhabib-rings4-sku-1658906163 [R=301]
这里有3个主要问题:

  1. mod_alias Redirect指令将根目录相对URL路径(以斜杠开头)作为源URL,而不是绝对URL。
  2. mod_rewrite的语法不一致。[R=301]RewriteRule(mod_rewrite)flags 参数,与mod_alias Redirect指令无关。Redirect将HTTP状态代码作为可选的第二个参数。例如Redirect 301 /buy-online-alhabib-rings4-sku-1658906163 ...
    1.因为你使用mod_rewrite(即RewriteRule)进行内部重写,你也应该使用mod_rewrite进行外部重定向以避免潜在的冲突。这些重定向需要在你的内部重写之前进行。
    此外,还应指出,
    1.在你发布的4个重定向中,看起来你只是简单地在URL路径的开头注入了/products/jewelry。这不需要4个单独的规则,只要你想重定向所有遵循这种特定格式的URL。
    请尝试以下方法:
RewriteEngine On

# Inject (redirect) "/product/jewelry" at the start of the URL-path
RewriteRule ^buy-online-alhabib-rings\d-sku-\d+$ /products/jewelry/$0 [R=301,L]

# Internal rewrite
RewriteRule ^buy-online-(.*) displayitems.php?url=$1 [L]

第一个规则中的$0反向引用包含与RewriteRule * 模式 * 匹配的完整URL路径。
注意,我还在上一个规则中删除了 substitution 字符串开头的./,这在这里是不必要的。

相关问题