.htaccess RewriteCond(文件夹存在但仍传递给处理程序)

时间:2014-03-12 13:22:53

标签: apache .htaccess

前一段时间我发布了一个关于.htaccess Rewrite Conditions的问题以及如何实现更易读的URL。这样的URL就像这样:http://somedomain.com/variable/variable/variable/

RewriteCond工作得很好,但现在我注意到了一些反响。使用.htaccess的子目录(在我的情况下,我将其用于AuthUser)将被根.htaccess RewriteCond语句忽略。我试图指定包含.htaccess的文件夹,但它是命中或未命中。在一台计算机上,它运行良好,我可以很好地访问URL但在另一台计算机上,我不能。最终最终发生的是我试图访问的URL(在这种情况下," / pricing")最终将变量(定价)传递给我的索引处理程序。

所以不用多说,这里是:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/pricing
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}   !index\.php                          [NC]
RewriteCond %{REQUEST_URI}   ^/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?  [NC,OR]
RewriteCond %{REQUEST_URI}   ^/([^/]+)/([^/]+)/([^/]+)/?  [NC,OR]
RewriteCond %{REQUEST_URI}   ^/([^/]+)/([^/]+)/?  [NC,OR]
RewriteCond %{REQUEST_URI}   ^/([^/]+)/?  [NC]
RewriteRule .  index.php?prefix=%1&month=%2&day=%3&title=%4    [L,NC]

有没有人建议在这里改变?我的意思是,我不明白子目录中的另一个.htaccess是如何导致这种情况发生的。

谢谢你, 克里斯

1 个答案:

答案 0 :(得分:0)

您构建规则的方式不会起作用,因为捕获的变量只能从最近的RewriteCond获得。

您可以这样做:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !^/pricing
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(?:/([^/]*)(?:/([^/]*)(?:/([^/]*))?)?)?/?$ index.php?prefix=%1&month=%2&day=%3&title=%4  [QSA,L]