.htaccess修改规则,并redirect,如果URL中有.php

我在.htaccess中获得了以下代码:

Options +FollowSymlinks RewriteBase /temp/test/ RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^about/(.*)/$ $1.php [L] RewriteRule ^(.*)/download/(.*)/(.*)/(.*)/downloadfile/$ file-download.php?product=$1&version=$2&os=$3&method=$4 [L] RewriteRule ^(.*)/download/(.*)/(.*)/(.*)/$ download-donate.php?product=$1&version=$2&os=$3&method=$4 [L] RewriteRule ^(.*)/download/(.*)/$ download.php?product=$1&version=$2 [L] RewriteRule ^subscribe/(.*)/$ subscribe-$1.php [L] RewriteRule ^subscribe/(.*)/(.*)/$ subscribe-$1.php?email=$2 [L] RewriteRule ^(.*)/screenshots/$ screenshots.php?product=$1 [L] RewriteRule ^(.*)/(.*)/$ products.php?product=$1&page=$2 [L] RewriteRule ^schedule-manager/$ products.php?product=schedule-manager&page=view [L] RewriteRule ^visual-command-line/$ products.php?product=visual-command-line&page=view [L] RewriteRule ^windows-hider/$ products.php?product=windows-hider&page=view [L] RewriteRule ^(.*)/$ $1.php [L] 

一切工作完美。 我想知道如何修改它,所以它会less线。 我很确定我能至less删除4-5行,但我不知道如何。 (合并schedule-manager,visual-command-line和windows-hider,等等)。

我知道规则的顺序是重要的,这个顺序是有效的 – 尽pipe我不知道为什么,我只是在规则上玩,直到有效。 如果你认为会有一个错误,请按照下面的顺序告诉我在哪里。

另一件事 – 我想redirect,例如www.myweb.com/products.php到www.myweb.com/products/(我的意思是地址栏中的URL将改变)。

我不知道redirect是否可以与我的重写规则一起进行。

谢谢。

编辑:删除产品的重写规则(什么Orbling提及),并更改1规则

顺序是重要的,因为你需要确保符合细节的规则出现在通用规则之前,这些通用规则也会抓住细节,但不应该。

所以,例如,下面的双参数行:

 RewriteRule ^newsletter-confirm/(.*)/$ newsletter-confirm.php?email=$1 [L] RewriteRule ^newsletter-remove/(.*)/$ newsletter-remove.php?email=$1 [L] RewriteRule ^(.*)/screenshots/$ screenshots.php?product=$1 [L] 

需要在通用双参数之前:

 RewriteRule ^(.*)/(.*)/$ products.php?product=$1&page=$2 [L] 

否则,他们会匹配作为产品(与页面)的请求。 只要你在考虑到这个优先顺序,它应该可以接受的工作。

您可以重构规则以使其更加简洁,但可能会以可读性为代价。 最后一条是倒数第二条线。

 RewriteRule ^(.*)/$ $1.php [L] RewriteRule ^products/$ products.php [L] 

products/是generics(.*)/一个特定情况,所以在处理过程之前,这个generics将与之匹配。 幸运的是,它仍然有效,因为关键字与文件名相同。