我正在尝试将此网址www.website.com/clients/index.php?display=client-name
转换为www.website.com/clients/client-name
.
但我遇到了问题,因为客户名称的长度通常不同。它可以是一个词到五个以上的词,但它们总是用连字符分隔:
- 客户
- 客户名称
- 客户名的庄园
- ETC
我已经成功地为这个网站写了几个其他的 url,但不能让这个工作。
我正在尝试将此网址www.website.com/clients/index.php?display=client-name
转换为www.website.com/clients/client-name
.
但我遇到了问题,因为客户名称的长度通常不同。它可以是一个词到五个以上的词,但它们总是用连字符分隔:
我已经成功地为这个网站写了几个其他的 url,但不能让这个工作。
连字符无关紧要,除非您使用的正则表达式与它们不匹配。您可以简单地包含-
在表达式中。例如,如果你有([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]
1)似乎(对我而言)您正在以其他方式进行操作-第二个应该是您的人类可读链接网址,第一个应该是 mod_rewrite 处理的结果。
2)只要您知道它的起点和终点,您的客户名称有多长并不重要 - 这里的起点应该
/clients/(.*)$
并且应该重写为
/clients/index.php?display=$1
阅读更多关于正则表达式的内容将对您有所帮助