2013-08-06 104 views
1

我有两个不同的事情,我想在两种不同类型的URI的情况发生,但我似乎无法从执行在第一种情况下已经被接受停止第二种情况。的htaccess的RewriteCond REQUEST_URI检测工作不

下面是一个例子:

abc.com 
abc.com/asdf 
abc.com/en/asdf 
abc.com/zh-cn/asdf/asdf 

都应该被引导到这个重写规则:

RewriteRule ^(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /index.php?lng=$1&tpl=$4 [QSA,L,NC] 

第2部分:

abc.com/myadmin/ 
abc.com/myadmin/asdf 
abc.com/myadmin/en/asdf 
abc.com/myadmin/zh-cn/asdf/asdf 

都应该被引导到这个重写规则:

RewriteRule ^myadmin/(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /myadmin/index.php?lng=$1&tpl=$4 [QSA,L,NC] 

我一直在试图达致这的方法是通过堆叠这样的条件:

RewriteCond %{REQUEST_URI} !^/myadmin/ 
RewriteRule ^(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /index.php?lng=$1&tpl=$4 [QSA,L,NC] 

RewriteCond %{REQUEST_URI} ^/myadmin/ 
RewriteRule ^myadmin/(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /myadmin/index.php?vlng=$1&tpl=$4 [QSA,L,NC] 

但无论我做什么,无论是规则还是执行。也许我这样做是正确的和次级执行在PHP模板进一步向下发生,我不知道。我只需要知道我迄今为止所做的工作是否看起来不错,全部都是。

回答

0

好吧,我发现这个问题,这部分是我的假定清除缓存扩展名为n的我的Chrome浏览器只曾在一次一个标签,并在扩展自动重新加载所有选项卡扩展激活后默认设置上。

与大多数开发人员一样,在开发访问我的网站,开发工具和技术资源的测试区域的任何特定时刻,我都会在浏览器中打开5-10个选项卡。当我的代码工作,我一般做我所有的缓存清理用手亲自让我知道这是真的做,在这种情况下,我选择了一个新的扩展添加到我的所谓“清除缓存” Chrome浏览器帮我照顾这更快一点,因为我正在进行很多小的更改,每次都需要进行干净的测试。我没有意识到的是,当你激活扩展时,它也会清除所有其他标签的缓存。我也没有注意到设置的默认设置是在执行清洁后自动重新加载它们。因为它也不会告诉你,它是视觉上重装所有这些其他选项卡,我不知道它是重装标签,我不得不开到我工作,该网站的主要页面负责装载饼干。

总结一下,当我在我的网站上工作时,在一个选项卡中,对我的管理区域进行测试更改时,我一直看到cookie更新,这些更新只能来自我网站的公共端,并一直让我觉得还有些问题与我的htaccess变化。我意识到,经过两天的故障排除之后,我添加的帮助使事情更轻松的便捷Dandy扩展实际上是重新加载浏览器中的所有选项卡,但不让我知道,并且所有其他调用都负责持续返回Cookie,只是由我的网站公开的一面产生,这让我很困惑。在这之后,我将再次手工清理我的缓存。

1

替换此条件:

RewriteCond %{REQUEST_URI} !^/myadmin/ 

有了这些2:

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

全部放在一起:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^myadmin/(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /myadmin/index.php?vlng=$1&tpl=$4 [QSA,L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /index.php?lng=$1&tpl=$4 [QSA,L,NC] 
+0

这似乎并没有解决我的问题,即使我删除第二组条件一起,我硬编码到URI的/ myadmin/DIR它仍然在服务器的根目录调用我的index.php文件。您的示例中的RewriteBase/critical是否正常工作?我以前从来没有要求过它。 – Vince

+0

首先,您必须确保上面的.htaccess直接位于DOCUMENT_ROOT下。请将您的完整.htaccess转储到您的问题中,并告诉我该代码无法工作的URI,以便我也可以从我的结尾进行测试。 – anubhava

+0

完整的.htaccess文件长度将近260行,并且位于DOCUMENT_ROOT中。如果我在尝试访问我的管理区域时使用上面提出的代码,另一个RewriteRule也会被执行,我可以告诉,因为另一个规则指向更新在我的站点公共端发现的cookie的代码。我可以阻止我的Cookie更新的唯一方法是删除您上面张贴的代码的第二部分,这打破了我的网站的公共端。我需要另一种方式来做到这一点,这将不允许这两个条件执行。 – Vince