带有连字符和不同字长的mod_rewrite

时间:2012-08-09 15:42:41

标签: apache mod-rewrite url-rewriting

我正在尝试将此网址www.website.com/clients/index.php?display=client-name转换为www.website.com/clients/client-name

但我遇到了问题,因为客户名称的长度通常不同。它可以是从一个单词到五个单词的任何地方,但它们总是用连字符分隔:

  • 客户端
  • 客户名称
  • 的-地产-的客户机名称

我已成功为此网站编写了其他几个网址,但无法使用此网站。

2 个答案:

答案 0 :(得分:0)

1)似乎(对我而言)你是以其他方式做的 - 第二个应该是你的人类可读链接网址,第一个应该是mod_rewrite处理的结果。
2)只要你知道它的起点和终点,你的客户名称有多长并不重要 - 这里的开始应该是
/clients/(.*)$
并应改写为 /clients/index.php?display=$1

阅读有关正则表达式的更多内容将有助于您

答案 1 :(得分:0)

除非您使用与它们不匹配的正则表达式,否则连字符无关紧要。您只需在表达式中包含-即可。例如,如果您有([A-Za-z0-9]+),则只需添加-即可([A-Za-z0-9-]+)。您还应该确保您匹配的任何内容都不适用于现有资源(例如index.php),因为您希望这些资源得到服务。如下所示:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^/?clients/([A-Za-z0-9-]+)/?$ /clients/index.php?display=$1 [L]