【问题标题】:Apache mod-rewrite for shorter urlsApache mod-rewrite 用于更短的 url
【发布时间】:2009-12-01 21:17:28
【问题描述】:

是否可以用 mod-rewrite 做类似的事情?

当前网址:

www.example.com/Departments/dynamicPage.php?DeptID=10&DeptName=HR

设置重写:

www.example.com/hr

可以重定向到上面(带有参数)吗?

我知道我可以在根级别创建一个“hr”文件夹并放入一个带有元刷新的 html 页面,但我讨厌额外的混乱。

我认为 .htaccess 301 是不可能的,但如果我错了,请纠正我。我正在寻找一个优雅的解决方案,可以添加到未来的实例中。

【问题讨论】:

标签: apache mod-rewrite redirect http-status-code-301


【解决方案1】:

看起来很合理。类似这样的东西应该可以解决问题:

RewriteRule ^hr$ /Departments/dynamicPage.php?DeptID=10&DeptName=HR [L]

如果你想让它通用:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /Departments/dynamicPage.php?DeptID=10&DeptName=$1 [L]

当然,那么你需要小心那些前往实际上并不存在的部门的人,并且你需要确保你所有的部门名称都有意义。

如果您想要 301 重定向,请在重写规则末尾使用 [R=301][L,R=301]

【讨论】:

  • 通用解决方案可能无法正常工作,因为您的 URL 中有 DeptID=10。
  • 好点。问题还有更多的冗余信息。这可能会被完全抛弃。
【解决方案2】:
RewriteEngine On
RewriteRule ^hr$ Departments/dynamicPage.php?DeptID=10&DeptName=HR [R=301]

【讨论】:

  • 是否 ^hr$ 指定这是像 ...com/hr/ 这样的根目录,或者如果有另一个嵌套目录,如 ..com/this/that/theother/hr,它是否也会重定向/???
  • ^ 在正则表达式的开头需要以下序列来匹配字符串的开头(在我们的例子中是 URL)。正则表达式末尾的$ 要求前一个序列匹配字符串的末尾。 ^hr$ 只会匹配 "hr" 的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多