我有两个不同的事情,我想在两种不同类型的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模板进一步向下发生,我不知道。我只需要知道我迄今为止所做的工作是否看起来不错,全部都是。
这似乎并没有解决我的问题,即使我删除第二组条件一起,我硬编码到URI的/ myadmin/DIR它仍然在服务器的根目录调用我的index.php文件。您的示例中的RewriteBase/critical是否正常工作?我以前从来没有要求过它。 – Vince
首先,您必须确保上面的.htaccess直接位于DOCUMENT_ROOT下。请将您的完整.htaccess转储到您的问题中,并告诉我该代码无法工作的URI,以便我也可以从我的结尾进行测试。 – anubhava
完整的.htaccess文件长度将近260行,并且位于DOCUMENT_ROOT中。如果我在尝试访问我的管理区域时使用上面提出的代码,另一个RewriteRule也会被执行,我可以告诉,因为另一个规则指向更新在我的站点公共端发现的cookie的代码。我可以阻止我的Cookie更新的唯一方法是删除您上面张贴的代码的第二部分,这打破了我的网站的公共端。我需要另一种方式来做到这一点,这将不允许这两个条件执行。 – Vince