.htaccess重写除一个子文件夹外

时间:2015-07-04 09:17:57

标签: php apache .htaccess mod-rewrite url-rewriting

我的.htaccess中有一些重写规则,我想添加一个异常子文件夹,以便mod_rewrite在用户链接到该子文件夹时停止重写。

我的特殊子文件夹是http://simplyservices.gr/aivali 当有人到达这个网址时,mod_rewrite遵循我添加的规则,最后用户无法看到aivali的内容 这是我的.htaccess

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/aivali/ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([^/]*)\.html$ /new1/products.php?kategory=$1 [L]
RewriteRule ^([^/]*)/([^/]*)\.html$ /new1/products.php?kategory=$1&subkategory=$2 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ /new1/products.php?kategory=$1&subkategory=$2&id=$3 [L]

我已经尝试过在同一篇文章中提到的所有内容,但没有任何效果。我认为我的RewriteRules有些不对劲。

由于

1 个答案:

答案 0 :(得分:0)

RewriteConds仅掩盖以下RewriteRule。

因此,您的!-f!-d!-d支票仅适用于第一次检查。除非真的有dir/dir/*.html个文件,否则这可能是多余的。

现在更有趣的是RewriteCond %{REQUEST_URI} !^/aivali/ [NC]也掩盖了第一个RewriteRule。然而,第一个RewriteRule仅匹配basename.html,而不是aivali/sub.html

你应该在第二个RewriteRule之前移动RewriteCond异常,因为那是主要捕获它的那个。