如何仅使用.htaccess限制当前目录的RewriteRule?

时间:2018-04-05 19:20:38

标签: html .htaccess mod-rewrite

我们假设我们正在谈论website.com,并且在根目录中有一个名为tags的文件夹。

此目录可帮助我拥有"动态网址",例如:website.com/tags/my-dinamic-urlwebsite.com/tags/another-example

要做到这一点,经过一整天的搜索:)我发现可以通过使用.htaccess进行,目前它看起来像这样:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule (.*) index.php?t=$1 [QSA]

在我的小观点中它很棒,对某人来说可能很有趣但是在stackoverflow.com上搜索了几个小时后我终于明白了.htaccess文件和RewriteRule的内容。

问题是:现在,这个RewriteRule会无休止地继续下去,因为如果我尝试像website.com/tags/my-dinamic-url这样的话,它也会继续,而不仅限于website.com/tags/my-dinamic-url/continue/another-continue/endlessly

我该如何阻止它?我需要,如果有人添加斜杠,页面需要返回404错误。

因此website.com/tags/my-dinamic-url需要工作,但website.com/tags/my-dinamic-url/website.com/tags/my-dinamic-url/something需要返回404错误。

1 个答案:

答案 0 :(得分:0)

通过检查uri是否以/tags开头,可以防止无限重定向。假设重写规则仅在uri深度为一级时适用:

# pass if the uri not starting with /tags/*
RewriteCond %{REQUEST_URI} !^/tags/ [NC]

# redirect, ([^/]+) matches any characters, except / character (slash)
RewriteRule ^([^/]+)$ /tags/$1 [R,QSA,L]