0

我很难理解为什么这个重写没有按照它的要求做。注意:我的 .htaccess 文件中的第一次重写工作正常,因此在本地主机上使用 mod_rewrite 没有问题。

我有 URI,我知道这些 URI 将采用以下格式:

http://localhost/managerhub/my-manager.php?i=1&t=dashboard

网站上线时:

http://themanagerhub.com/my-manager.php?i=1&t=dashboard

我的 .htaccess 文件是这样写的:

RewriteEngine On

RewriteRule ^([a-z\-]+)$ $1.php [L]
RewriteRule ^my-manager-([0-9]+)-([a-z]+)  my-manager.php?i=$1&t=$2 [PT]

要实现干净的 URL,例如:

http://localhost/managerhub/my-manager-1-dashboard

理想情况下,我真的不想要第一个捕获组([0-9]+),因为我真的不想要得到的干净 url 中的 'i' 值 - 所以理想的 id 像:

http://localhost/managerhub/my-manager-dashboard

但是,到目前为止,我什至根本没有尝试过重写工作:

  • 在目标上领先正斜杠(尽管我认为没有必要)
  • 尝试将目标中的“&”符号更改为使用 &
  • 删除替换为和不替换 [L] 标志的 [PT] passthru 标志
  • 尝试了模式中的大多数“最少”限制性字符类,即 (.*) 而不是 ([0-9]+)
  • 评论'out'第一个 RewriteRule 可以完美地工作顺便说一句 - 所以孤立地使用麻烦的规则

这些都不起作用 - 第二个重写规则对目标 url 没有影响,所以我什至看不到差异是什么。我还是 mod_rewrite 的新手,所以有点依赖信息失败,所以我可以解决我的 reg-ex 是否错误,但我怀疑它只是被忽略了,因为我得到了“zilch”!

任何帮助表示赞赏 - 也许指向我的愚蠢。谢谢

4

1 回答 1

0

我假设您的 htaccess 文件位于“managerhub”目录中。这就是需要这些规则的地方。您可能还需要添加一个基础:

RewriteEngine On
RewriteBase /managerhub/

RewriteRule ^([a-z\-]+)$ $1.php [L]
RewriteRule ^my-manager-([0-9]+)-([a-z]+)$ my-manager.php?i=$1&t=$2 [L,PT]

当他们到达实时站点时,您需要对其进行更改。您可以通过以下方式删除第一个捕获组:

RewriteRule ^my-manager-([a-z]+)$ my-manager.php?t=$1 [L,PT]

L标志并不是 100% 需要的。

于 2013-11-13T22:18:29.320 回答