我正在尝试使用.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”等
但什么也没发生。
2条答案
按热度按时间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); }
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个主要问题:
Redirect
指令将根目录相对URL路径(以斜杠开头)作为源URL,而不是绝对URL。[R=301]
是RewriteRule
(mod_rewrite)flags 参数,与mod_aliasRedirect
指令无关。Redirect
将HTTP状态代码作为可选的第二个参数。例如Redirect 301 /buy-online-alhabib-rings4-sku-1658906163 ...
1.因为你使用mod_rewrite(即
RewriteRule
)进行内部重写,你也应该使用mod_rewrite进行外部重定向以避免潜在的冲突。这些重定向需要在你的内部重写之前进行。此外,还应指出,
1.在你发布的4个重定向中,看起来你只是简单地在URL路径的开头注入了
/products/jewelry
。这不需要4个单独的规则,只要你想重定向所有遵循这种特定格式的URL。请尝试以下方法:
第一个规则中的
$0
反向引用包含与RewriteRule
* 模式 * 匹配的完整URL路径。注意,我还在上一个规则中删除了 substitution 字符串开头的
./
,这在这里是不必要的。