Mod_rewrite .htm伪造子目录

时间:2010-01-31 17:31:53

标签: apache .htaccess mod-rewrite

我有一个CMS的网站,它使用mod_rewrite使网页看起来更干净。以前,干净的URL有扩展名.htm,但是我希望将它转换为伪造的子目录,IE:

http://www.example.com/pagename/

我有两个重写规则来重写旧方案和潜在的新方案:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+).htm$ index.php?page=$1 [QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ index.php?page=$1 [QSA]

我的问题是我尝试使用将旧网址重定向到新网址的规则不会做任何事情。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+).htm$ $1/ [R=302,NC,QSA]

1 个答案:

答案 0 :(得分:1)

您不能使用具有相同模式的两个规则,因为只应用第一个规则。尝试使用新的“重定向”规则替换“重写”规则,以重定向旧网址,而不是仅重写:

# redirect foo.htm to foo/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.htm$ $1/ [R=301,NC]
# rewrite foo/ to index.php?page=foo
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ index.php?page=$1 [QSA]