对除

时间:2017-12-11 17:30:16

标签: .htaccess mod-rewrite url-rewriting

我希望每次访问:

www.example.com/demo/action.html

重定向到

www.example.com/demo/?section=action

action变为变量。 但是,我不想在几种情况下应用该规则,让我们说:

www.example.com/demo/mypage1.html
www.example.com/demo/mypage2.html 

对于这些情况,我希望他们加载真实的html网页mypage1.htmlmypage2.html

目前我对所有可能的action变量都有20条规则。但由于它在性能方面似乎并不理想,我宁愿只有2个特殊情况和所有其他案例的单一规则。

这就是我现在所拥有的:

RewriteRule ^demo/removeUser.html$ demo/?section=removeUser [QSA]
RewriteRule ^demo/addUser.html$ demo/?section=addUser[QSA]
RewriteRule ^demo/addUser.html$ demo/?section=editUser[QSA]
RewriteRule ^demo/addUser.html$ demo/?section=comment[QSA]
... etc

1 个答案:

答案 0 :(得分:1)

您可以将异常保留在顶部,然后是通用重写规则:

RewriteEngine On

RewriteRule ^demo/(?:mypage1|mypage2)\.html$ - [L,NC]

RewriteRule ^demo/([\w-]+)\.html$ demo/?section=$1 [QSA,L,NC]

这假设demo/目录中没有.htaccess。

但是,如果你只是想从这个重写中排除所有现有文件,那么你只需要一个这样的规则:

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^demo/([\w-]+)\.html$ demo/?section=$1 [QSA,L,NC]