【问题标题】:URL rewrite issues using .htaccess使用 .htaccess 的 URL 重写问题
【发布时间】:2009-12-31 19:36:10
【问题描述】:

我正在尝试编写如下所示的 URL,但是当我尝试调用 seo 查询参数时,它总是返回 index.php。知道为什么它没有为“seo”返回正确的值吗?

RewriteRule ^([^/]*)$ index.php?c=home&m=details&seo=$1 [L]

它应该转发的 URL 是这样的:http://domain.com/The-Name-of-the-Product。该 URL 应该被重写为 http://domain.com/index.php?c=home&m=details&seo=The-Name-of-the-Product,但它最终会变成 http://domain.com/index.php?c=home&m=details&seo=index.php

【问题讨论】:

  • 正确的值是多少?该规则实际上意味着哪些 URL 可以匹配?看起来没有很多可以匹配的(主要是 /、//、/// 等)。你想要一个 .* 而不是一个 * 吗?
  • 转发到的 URL 应该是这样的:domain.com/The-Name-of-the-Product
  • 您是将 RewriteRule 放在 .htaccess 还是 httpd.conf 文件中?您还定义了哪些其他 RewriteRules(请按顺序发布)?
  • 重写规则在 .htaccess 中
  • 对你想要的行为和你得到的行为的描述可能会更清楚一点。您希望将http://domain.com/The-Name-of-the-Product 重写为http://domain.com/index.php?c=home&m=details&seo=The-Name-of-the-Product 是否正确,但它最终为http://domain.com/index.php

标签: .htaccess mod-rewrite


【解决方案1】:

各种事件会导致 URL 在重写过程中返回。您可以使用RewriteCond 来防止这种情况:

RewriteCond $1 !^index.php$
RewriteRule ^/?([^/]+)$ index.php?c=home&m=details&seo=$1 [L,NS]

来自mod_rewrite technical details

当您在每个目录上下文中操作 URL/文件名时,mod_rewrite 首先将文件名重写回其对应的 URL(这通常是不可能的,但请参阅下面的 RewriteBase 指令以了解实现此目的的技巧),然后启动一个新的内部带有新 URL 的子请求。这将重新启动 API 阶段的处理。

这会一直吸引人们。

【讨论】:

  • 打败了我,但就是这样! +1
  • 我确实发现了一个问题。如果现在不将 index.php 输入 URL,我的域将无法使用。 domain.com 不起作用。它只是把我带到一个空白的白页。有什么想法吗?
  • 将“*”元字符更改为“+”,以使 URL 的路径中至少包含一个字符。答案已更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多