0

我创建一个这样的 mod_rewrite 规则

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME}\.php !-f 
RewriteRule ^(.*)$ ./page.php?key=$1 

有用!但我想这样做:

www.site.com/var1.var2.var3 

(变量用点隔开)用-或_隔开没问题,但如果我把点隔开,为什么?

4

1 回答 1

0

我假设您正在尝试这样的规则

RewriteRule ^(.*).(.*).(.*)$ ./page.php?key=$1&key2=$2&key3=$3

但是您应该记住要转义要解释为句点的点。有很多方法可以解决这个问题,但如果您是.htaccess文件新手,这里有一个简单的方法:

RewriteEngine  On
RewriteBase    /

# Skip existing files or directories
RewriteCond %{SCRIPT_FILENAME}     -d [OR] 
RewriteCond %{SCRIPT_FILENAME}     -f
RewriteRule ^                      -  [L]

# Add default PHP extension when appropriate
RewriteCond %{SCRIPT_FILENAME}.php -f
RewriteRule ^.*                    $0.php  [L]

# Pick up 1,2 and 3 parameter versions 
RewriteRule ^(.*?)\.^(.*?)\.(.*)$ page.php?key=$1&key2=$2&key3=$3 [QSA,L]
RewriteRule ^(.*?)\.(.*?)$        page.php?key=$11&key2=$2        [QSA,L]
RewriteRule ^(.*?)\.$             page.php?key=$1                 [QSA,L]

笔记:

  • 第一条规则使用“^”作为始终匹配的模式,“-”表示不替换它。
  • 第二个使用 $0 表示整个匹配模式
  • 规则 3-5 匹配 3,2,1 参数选项
  • [L](最后一个)标志表示跳过其余规则
  • 如果您使用其他参数,您将需要 QSA 标志。

将存在检查拆分为的原因是您需要处理诸如 CSS 和图像 (PNG/GIF/PNG) 文件之类的文件以及您的应用程序语法。

于 2012-07-07T16:58:13.780 回答