使用重写规则的值可选

时间:2013-03-16 21:38:39

标签: apache url mod-rewrite rewrite

也许有人可以帮我改写重写规则。 我在Apache中使用以下重写规则:

RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ /index.php?q=$1&m=$2&id=$3&p=$4 [L]

这适用于输入网址:www.domain.com/q/m/id/p

但是如何使用相同的重写规则访问网址:www.domain.com/q/m/id? Last参数(& p = $ 4)应该是可选的

还要注意

我的style.css文件位于www.domain.com/theme/main/style.css

当我在重写中使用4个值时,规则不应该覆盖style.css。

非常感谢任何帮助!

的Fab

1 个答案:

答案 0 :(得分:0)

如果只有“最后一个参数(& p = $ 4)应该是可选的”,则不需要4个规则。只需要2条规则。

除非您希望style.css成为第一条规则中的参数之一,否则您也应将其排除。如果不是这种情况,请在下面的第一条规则之前删除相应的行。

此外,通过添加NOT条件确保规则不会进入无限循环非常重要。

你可以试试这个:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI}  !style\.css    [NC]
RewriteCond %{REQUEST_URI}  !index\.php    [NC]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?q=$1&m=$2&id=$3   [NC,L] 

RewriteCond %{REQUEST_URI}  !style\.css    [NC]
RewriteCond %{REQUEST_URI}  !index\.php    [NC]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ index.php?q=$1&m=$2&id=$3&page=$4 [NC,L]

对于永久和可见的重定向,将[NC,L]替换为[R = 301,NC,L]