htaccess的正则表达式匹配由连字符分割的多个单词

时间:2014-06-10 16:28:41

标签: regex .htaccess

现在我在我的电子商店脚本中使用这个htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/([\w-]+)/?$ product.php?category_id=$1&product_id=$2 [QSA,L]
RewriteRule ^([\w-]+)/?$ products.php?category_id=$1 [QSA,L]

看起来SEO友好,并允许客户看到很好的打印地址栏,如:

mydomain.com/CDPlayers/Sonytr200

问题在于我被告知要改进引擎而不是CDPlayersSonytr200我应该生成CD-PlayersSony-tr-200。我不得不承认我从网上获得了htaccess正则表达式,因为我没有多研究正则表达式。

这个因为它只接受一个单词而不再工作了,现在我需要的东西可以让我使用连字符分割的无限数量的单词,所以它必须在以下情况下工作:

  • mydomain.com/Word(第1阶段)

  • mydomain.com/Word-word-word(第1阶段)

  • mydomain.com/Word/Word(第2阶段)

  • mydomain.com/Word-word-word/Word-word-word(第2阶段)

1 个答案:

答案 0 :(得分:2)

您可以使用新的递归规则首先删除所有连字符:

RewriteEngine On

RewriteRule "^([^-]*)-+([^-]*-.*)$" $1-$2 [L]
RewriteRule "^([^-]*)-([^-]*)$" /$1-$2 [L,R=302]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/([\w-]+)/?$ product.php?category_id=$1&product_id=$2 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ products.php?category_id=$1 [QSA,L]