我怎样才能解决这个htaccess问题

时间:2010-11-02 18:48:49

标签: php .htaccess

我有以下动态网址...

http://www.mydomain.com/v/dynamicvaluehere

我跟随我的htaccess

RewriteRule ^v/(.*)$ script.php?name=$1 [NC,L]

现在工作正常,我想进一步创建,即

http://www.mydomain.com/v/dynamicvaluehere/Page-dyanamicnumberhere.html

我跟随我的htaccess

RewriteRule ^v/(.*)/Page-(.*)\.html$ script.php?name=$1&number=$2 [NC,L]

但它不起作用请帮助... 另外请注意,如上所述,动态值第二个是samy,但只包含动态数字...

2 个答案:

答案 0 :(得分:1)

我认为问题可能是你使用通配符。如果您的.htaccess看起来像这样:

RewriteRule ^v/(.*)$ script.php?name=$1 [NC,L]
RewriteRule ^v/(.*)/Page-(.*)\.html$ script.php?name=$1&number=$2 [NC,L]

然后没有模式会达到第二个参数,因为(.*)/Page-(.*)\.html实际上会首先落在(.*)之下。

您可以将通配符优化为以下内容:

RewriteRule ^v/([A-Za-z0-9].*)$ script.php?name=$1 [NC,L]
RewriteRule ^v/([A-Za-z0-9].*)/Page-([0-9].*)\.html$ script.php?name=$1&number=$2 [NC,L]

或者甚至可以尝试将语句的顺序切换为:

RewriteRule ^v/(.*)/Page-(.*)\.html$ script.php?name=$1&number=$2 [NC,L]
RewriteRule ^v/(.*)$ script.php?name=$1 [NC,L]

答案 1 :(得分:0)

由于第一条规则的贪婪性质,您的第二条规则永远无法达成。您可以将其置于第一个规则之上,也可以使您的第一个规则更具体。

尝试以下方法:

RewriteRule ^v/(.+)/Page-(.+)\.html$ script.php?name=$1&number=$2 [NC,L]
RewriteRule ^v/(.*)$ script.php?name=$1 [NC,L]