4

我环顾四周,但坦率地说,我不确定我需要使用哪些术语来搜索以获得更精确的结果。哎呀,我在 url vs. uri vs. page vs. link 以及每个是什么和不是什么方面都在苦苦挣扎。并且 MOD_REWRITE 指南似乎是为精通 Apache 或 Unix 或其他任何东西的人编写的,尤其是当他们似乎都没有解释或解析示例以了解每个“编程”字符的作用或含义时。在这里和整个谷歌,我似乎没有得到任何我想要的搜索结果的前 25 个结果,我尝试过涵盖...的概念。

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

例如

三个请求的 URL 是:

  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

WORDS-AND-DASHES 的内容和长度因页面而异,NUMBERS_WITH_UNDERSCORES 也是如此。唯一的常量是域和三个链接类型标识符,-c-、-n- 和 -p-。WORDS-AND-DASHES 被替换为取决于链接类型的变量,该变量被消除,并且 NUMBERS_WITH_UNDERSCORES 保留在新 URL 中。

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

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

FWIW,在升级过程中发现旧的 URL 重写模块停止运行,所以我正在尝试快速重建搜索引擎的 .htaccess 和 sitemap.xml 以及它们各自结果中的所有死链接。

......那么我可能又要在 Mangled Metaphorbial Creek 上狂吠了。

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

-公元前

4

2 回答 2

1

以下规则应该有效。它们必须放在网站根目录的 .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]

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

于 2012-05-21T08:22:37.063 回答
0

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

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]
于 2012-05-21T08:23:18.920 回答