首页 > 解决方案 > 我需要有关 .htaccess 的帮助

问题描述

我想通过起诉 .htaccess 静默地将 esample.com/moving/city/id 重定向到 esample.com/new/moving/city/id (意味着 Brower 中的 url 仍然是 esample.com/moving/city/id)但是如何?

提前致谢。

标签: .htaccessredirect

解决方案


你想实现一个单一的内部重写,所以你需要实现一个重写规则:

RewriteEngine on
RewriteRule ^/?moving/city/(.+)$ /new/moving/city/$1 [QSA,END]

这将是一种类似的方法:

RewriteEngine on
RewriteRule ^/?(moving/city/.+)$ /new/$1 [QSA,END]

显然,需要为请求的位置(主机)启用和激活重写模块。如果您想使用分布式配置文件(“.htaccess”)而不是在实际的 http 服务器的主机配置(您应该更喜欢...)中实现此类规则,则还需要首先启用对分布式配置文件(“.htaccess”)的解释。

如果您可以更具体地了解在这样的“cidy id”中实际出现的字符(例如只有数字或只有字母),那么规则可能会更具体。

一般来说,查看一个计划使用的工具的文档是一个很好的主意,这里是 apache http 服务器的重写模块: https ://httpd.apache.org/docs/current/mod/mod_rewrite .html 在那里你会找到RewriteRule指令的解释。作为开源软件的典型文档,文档质量非常好,并附带了很好的示例。


更新:

考虑到您对这个答案的评论,您实际上要求的是重写,它在请求路径中有两个变量组件:城市名称一些数字 id。我假设第一个组成部分(你的问题中的“移动”,现在突然在你的评论中出现“demenagement”,是一个固定的字符串,所以我保持原样......

这是一个应该实现这个的变体:

RewriteEngine on
RewriteRule ^/?moving/(\w+)/(\d+)$ /new/moving/$1/$2 [QSA,END]

如果您还允许在城市名称中使用空格,则事情会变得更加复杂:

RewriteEngine on
RewriteRule ^/?moving/([a-z\s]+)/(\d+)$ /new/moving/$1/$2 [NC,QSA,END]

推荐阅读