繁体   English   中英

重写URL后如何重定向页面

[英]How to redirect the page after rewrite the URL

我必须重写 URL 所以我在 my.htaccess 中使用了下面的代码,它正在工作

RewriteRule ^products/part/pumps/?$ pumps.php [L,NC]

如果有人试图访问 url 链接exmple.com/products/part/pumps/那么它会显示pumps.php数据。

现在我的问题是,如果有人尝试访问页面 example.com/pumps.php 那么我该如何重定向到此链接exmple.com/products/part/pumps/

我已经尝试过,但出现重定向错误

Redirect 301  /pumps.php /products/part/pumps/

我有很多页面,我也必须重定向它们。 在这里分享两个例子

RewriteRule ^power\.php$ /products/engine/power/ [R=301,L]
RewriteRule ^connecting\.php$ /products/connection/power/connecting/ [R=301,L]

在现有重写之前使用以下内容:

# External redirect
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^pumps\.php$ /products/part/pumps/ [R=301,L]

(但首先使用 302 重定向进行测试以避免潜在的缓存问题。)

通过检查REDIRECT_STATUS环境变量是否为“空”,我们可以仅重定向来自用户的直接请求,而不是稍后重写的重写请求。 成功重写请求后, REDIRECT_STATUS的值为200 (如 200 OK HTTP 状态)。

RewriteCond (条件)指令必须先于触发外部重定向的每个RewriteRule指令。

Redirect指令(mod_alias 的一部分,而不是 mod_rewrite)被无条件处理,最终将重定向重写的请求,从而导致重定向循环。 您需要始终使用 mod_rewrite。


使用END标志而不是RewriteCond (需要 Apache 2.4)

或者,您可以修改现有的重写以使用END标志(而不是L )来防止重写引擎循环。 然后可以省略上面提到的RewriteCond指令。 但请注意, END标志仅在 Apache 2.4+ 上可用。

例如:

# External redirects
RewriteRule ^pumps\.php$ /products/part/pumps/ [R=301,L]

# Internal rewrites
RewriteRule ^products/part/pumps/?$ pumps.php [END,NC]

建议在内部重写之前将所有外部重定向组合在一起。

不幸的是,由于这些重写的性质各不相同,因此看起来无法进一步减少规则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM