我遇到了一些mod_rewrite规则的问题。我必须制作两种类型的链接(第一种是针对有专辑的艺术家,第二种是针对没有专辑的艺术家): 1)/lyrics/artist-name/album-name/song-name.php 2)/lyrics/artist-name/song-name.php
我的代码如下所示:
RewriteRule ^lyrics/(.*)/(.*)/(.*).php$ /artists-lyrics.php?a=$1&b=$2&c=$3 [QSA,L]
RewriteRule ^lyrics/(.*)/(.*).php$ /artists-lyrics.php?a=$1&b=$2 [QSA,L]
可悲的是,只有第一条规则有效。如何更改它们以使它们都起作用?
谢谢。
答案 0 :(得分:1)
您需要使您的模式更具体。尝试使用[^/]+
(除/
之外的一个或多个字符)而不是.*
(任何长度的任何字符):
RewriteRule ^lyrics/([^/]+)/([^/]+)/([^/]+)\.php$ /artists-lyrics.php?a=$1&b=$2&c=$3 [QSA,L]
RewriteRule ^lyrics/([^/]+)/([^/]+)\.php$ /artists-lyrics.php?a=$1&b=$2 [QSA,L]
答案 1 :(得分:0)
第二条规则永远不会有效,因为第一条规则与“/lyrics/artist-name/song-name.php”匹配:(。*)表示:任意数量的字符(甚至为零)。
没有测试的可能性,这可能有效:
RewriteRule ^lyrics/([^\]+)/([^\]+).php$ /artists-lyrics.php?a=$1&b=$2 [QSA,L]
RewriteRule ^lyrics/([^\]+)/([^\]+)/([^\]+).php$ /artists-lyrics.php?a=$1&b=$2&c=$3 [QSA,L]
答案 2 :(得分:0)
通常,您希望将原子设置为尽可能严格,以避免意外后果。在下面的示例中,只接受字母数字字符(这可能是您想要的)。 +
符号表示一个或多个,而*
表示零或更多。
RewriteRule ^lyrics/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+).php$ /artists-lyrics.php?a=$1&b=$2&c=$3 [QSA,L]
RewriteRule ^lyrics/([a-z0-9]+)/([a-z0-9]+).php$ /artists-lyrics.php?a=$1&b=$2 [QSA,L]