首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >指向*不*重定向某些URL的.htaccess指令

指向*不*重定向某些URL的.htaccess指令
EN

Stack Overflow用户
提问于 2008-08-06 08:15:28
回答 3查看 4K关注 0票数 22

在一个严重依赖.htaccess RewriteRules的PrettyURL(在我的例子中是CakePHP)的应用程序中,我如何正确地设置指令以将某些目录排除在此重写之外?这就是:

/appRoot/.htaccess
         app/
         static/

默认情况下,对/appRoot/*的每个请求都会被重写,以便由app/webroot/index.php拾取,在那里它将被分析并调用相应的控制器操作。这是由.htaccess中的以下指令完成的

RewriteBase /appRoot

RewriteRule ^$ app/webroot/     [L]
RewriteRule (.*) app/webroot/$1 [L]

我现在想从这次重写中排除一些像static/这样的目录。在蛋糕RewriteRules之前,我尝试过这个:

RewriteCond $1 ^(static|otherDir).*$ [NC]
RewriteRule (.*) - [L]

到目前为止,请求不再被重写,但现在所有的请求都被跳过了,甚至不应该与^(static|otherDir).*$匹配的合法的请求也是如此。

我尝试了这些规则的几个变体,但无法让它以我想要的方式工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-08-07 06:09:54

正确的答案是…

RewriteRule   ^(a|bunch|of|old|directories).* - [NC,L]

# all other requests will be forwarded to Cake
RewriteRule   ^$   app/webroot/   [L]
RewriteRule   (.*) app/webroot/$1 [L]

即使使用了这些指令,我仍然不明白为什么最初调用根目录中的index.php文件。它现在位于

/appRoot/app/views/pages/home.ctp

也可以通过Cake来处理。现在有了这个,我想这也会起作用(对Mike的建议进行了稍微修改的版本,未经测试):

RewriteCond $1      !^(a|bunch|of|old|directories).*$ [NC]
RewriteRule ^(.*)$  app/webroot/$1 [L]
票数 6
EN

Stack Overflow用户

发布于 2008-08-06 08:19:30

从前面的规则中删除L:

RewriteBase /appRoot

RewriteRule ^$ app/webroot/    
RewriteRule (.*) app/webroot/$1

L的意思是“在这里停止重写过程,不再应用任何重写规则。”

票数 1
EN

Stack Overflow用户

发布于 2008-08-06 08:26:57

您可以不将条件应用于以下规则,但使用否定,如(由于其一些变体,我不太擅长记住.htaccess规则,因此标志可能是错误的):

RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/ [L]

RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/$1 [L]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档