您的条件仅适用于第一条规则。每一组都只适用于紧随其后RewriteCond
的。所以条件只适用,最后两条规则根本没有条件。RewriteRule
RewriteRule ^/([^./]+)\.html$ category.php?id=$1
您的条件是将存在的东西重写为其他东西,这将导致重写循环。你可能想要:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
您的第二条和第三条规则将永远不会被应用,因为如果有人请求/some-page.html
第一条规则的正则表达式将匹配它并将 URI 重写为/category.php?id=some-page
,那么 next to 规则将永远不会匹配,因为第一条规则已经将 URI 重写为category.php
。
您的正则表达式与前导斜杠匹配,在 htaccess 文件中的重写规则中应用的 URI 已去除前导斜杠,因此您希望改为:
RewriteRule ^([^./]+)\.html$ category.php?id=$1
1、2和4很容易。3,没那么多。您将不得不找出一种独特的方式来将 html 页面表示为类别、标签或游戏。你不能让所有 3 个看起来都一样,没有办法告诉你想要哪一个。拿:
/something.html
这应该是一个类别吗?一个标签?还是一出戏?谁知道呢,你的重写规则肯定不会。但是,如果您在每个前面都加上一个关键字,那么您可以区分:
/category/something.html
/tag/something.html
/play/something.html
你的规则看起来像:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^category/([^./]+)\.html$ category.php?id=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^tag/([^./]+)\.html$ tag.php?id=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^play/([^./]+)\.html$ play.php?id=$1