mod_rewrite可以在URL中找到变量,替换其前面的部分,删除变量并保留剩余的内容


Can mod_rewrite find a variable within an URL, replace a portion before it, delete the variable and preserve what remains?

我环顾四周,但坦率地说,我不确定我需要搜索的术语才能获得更精确的结果。哎呀,我正在努力解决网址与 uri 与页面与链接以及每个是什么和不是什么。MOD_REWRITE指南似乎是为精通Apache或Unix或其他任何东西的人编写的,特别是当他们似乎都没有解释或解析每个"编程"字符的作用或含义的示例时。在这里和整个谷歌,我似乎在我尝试涵盖以下概念的搜索的前 25 个搜索结果中没有得到我想要的任何东西......

好吧,我正在尝试做的是替换依赖于三个变量的URL的通配符字符串,同时保留其他位。使用mod_rewrite可以吗?

例如

三个请求的网址是:

  1. http://mydomain.com/WORDS-AND-DASHES-c-NUMBERS_WITH_UNDERSCORES
  2. http://mydomain.com/WORDS-AND-DASHES-m-NUMBERS_WITH_UNDERSCORES
  3. http://mydomain.com/WORDS-AND-DASHES-p-NUMBERS_WITH_UNDERSCORES

重写的 URL 应分别为:

  1. http://mydomain.com/index.php?index&categories_id=NUMBERS_WITH_UNDERSCORES
  2. http://mydomain.com/index.php?main_page=index&mfrs_id=NUMBERS_WITH_UNDERSCORES
  3. http://mydomain.com/index.php?main_page=index&products_id=NUMBERS_WITH_UNDERSCORES

单词和破折号的内容和长度因页面而异,NUMBERS_WITH_UNDERSCORES也是如此。唯一的常量是域和三个链路类型标识符 -c-, -n- 和 -p-。单词和破折号会根据链接类型替换为变量,该变量被消除,并且NUMBERS_WITH_UNDERSCORES保留在新 URL 中。

IOW 如果一个 url 包含"-c-",那么我想用"index.php?index&categories_id="替换域和"-c-"之间的所有内容,删除"-c-"部分并保留NUMBERS_WITH_UNDERSCORES。可能只有一个数字跟在 -c-, -m- 或 -p- 后面。

如果我知道PHP,这可能是可能的,但我不知道,我希望mod_write像我认为的那样强大。如果每个变量需要多个规则,我也很好。做三倍的工作仍然比10000+次好。

FWIW,在升级过程中发现旧的 URL 重写模块停止运行,因此我正在尝试为搜索引擎和各自结果中的所有死链接快速重建 .htaccess 和站点地图.xml。

。然后我又可能在残缺的隐喻溪上吠叫。

感谢您分享的任何知识、方向和/或建议。

-公元前

以下规则应该有效。它们必须放置在您网站根目录中的 .htaccess 文件中。

RewriteEngine On
RewriteRule ^([a-z-]+)-c-([0-9_]+) index.php?index&categories_id=$2         [NC]
RewriteRule ^([a-z-]+)-m-([0-9_]+) index.php?main_page=index&mfrs_id=$2     [NC]
RewriteRule ^([a-z-]+)-p-([0-9_]+) index.php?main_page=index&products_id=$2 [NC]

当请求您在问题中提到的 URL 时,Apache 将触发index.php。Apache 将相应地填充查询字符串。如果WORDS-AND-DASHES包含a-z-以外的内容,则相应地修改规则。

这可能过于简化,但请尝试:

RewriteEngine On
RewriteRule ^(.*?)-c-(['d_]+)$ index.php?index&categories_id=$2         [L]
RewriteRule ^(.*?)-m-(['d_]+)$ index.php?main_page=index&mfrs_id=$2     [L]
RewriteRule ^(.*?)-p-(['d_]+)$ index.php?main_page=index&products_id=$2 [L]