我环顾四周,但坦率地说,我不确定我需要搜索的术语才能获得更精确的结果。哎呀,我正在努力解决网址与 uri 与页面与链接以及每个是什么和不是什么。MOD_REWRITE指南似乎是为精通Apache或Unix或其他任何东西的人编写的,特别是当他们似乎都没有解释或解析每个"编程"字符的作用或含义的示例时。在这里和整个谷歌,我似乎在我尝试涵盖以下概念的搜索的前 25 个搜索结果中没有得到我想要的任何东西......
好吧,我正在尝试做的是替换依赖于三个变量的URL的通配符字符串,同时保留其他位。使用mod_rewrite可以吗?
例如
三个请求的网址是:
-
http://mydomain.com/WORDS-AND-DASHES-c-NUMBERS_WITH_UNDERSCORES
-
http://mydomain.com/WORDS-AND-DASHES-m-NUMBERS_WITH_UNDERSCORES
-
http://mydomain.com/WORDS-AND-DASHES-p-NUMBERS_WITH_UNDERSCORES
重写的 URL 应分别为:
-
http://mydomain.com/index.php?index&categories_id=NUMBERS_WITH_UNDERSCORES
-
http://mydomain.com/index.php?main_page=index&mfrs_id=NUMBERS_WITH_UNDERSCORES
-
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]