.htaccess 重定向,如果 url 中的文件夹名称

Posted

技术标签:

【中文标题】.htaccess 重定向,如果 url 中的文件夹名称【英文标题】:.htaccess redirect if folder name in url 【发布时间】:2013-02-26 00:48:12 【问题描述】:

使用 .htaccess,我希望将 URL 从一个文件夹重定向到另一个文件夹。

例如,如果用户请求“forbiddenFolder”http://www.mysite.com/forbiddenFolder/subfolder

http://www.mysite.com/forbiddenFolder/somefile.php

http://www.mysite.com/forbiddenFolder/somefile.swf

http://www.mysite.com/forbiddenFolder/somefile.f4v

他们应该被重定向到http://www.mysite.com/forbidden.php

我不想锁定目录本身,因为那里有需要的资源。重定向只能基于 URL 字符串,或者如果用户从 www.anothersite.com 创建脚本并从http://www.mysite.com/forbiddenFolder 提取文件

我认为应该实现重写条件....?

【问题讨论】:

您自己的网站上是否有指向这些文件的链接,这些链接必须由 HTTP 引用者允许? 是的,但它们永远不会出现在 URL 中。它们是通过包含访问的。 【参考方案1】:

你可以试试这个:

Options +FollowSymLinks -MultiViews                                        
RewriteEngine On                                                           
RewriteBase /                                                              
RewriteCond %REQUEST_URI  ^/forbiddenFolder     [NC]                     
RewriteCond %REQUEST_URI  /[\w]+\.(php|swf|f4v) [NC,OR]                  
RewriteCond %REQUEST_URI  /[^.]+/?$             [NC]                     
RewriteCond %REQUEST_URI  !forbidden\.php       [NC]                     
RewriteRule .*              /forbidden.php        [L,NC]  
                                                                       

内部地图

http://www.mysite.com/forbiddenFolder/subfolder

http://www.mysite.com/forbiddenFolder/somefile.php

http://www.mysite.com/forbiddenFolder/somefile.swf

http://www.mysite.com/forbiddenFolder/somefile.f4v

收件人:

http://www.mysite.com/forbidden.php

对于永久且可见的重定向,请将[L,NC] 替换为[R=301,L,NC]


选项

使用经过修改的传入 URL 结构。

例如:

http://localhost/trafficticket.tv/Sites/public_html/forbiddenFolder/somefile.swf

用这条规则替换之前的规则块:

Options +FollowSymLinks -MultiViews                                        
RewriteEngine On                                                           
RewriteBase /                                                              
RewriteCond %REQUEST_URI  /forbiddenFolder      [NC]                     
RewriteCond %REQUEST_URI  /[\w]+\.(php|swf|f4v) [NC,OR]                  
RewriteCond %REQUEST_URI  /[^.]+/?$             [NC]                     
RewriteCond %REQUEST_URI  !forbidden\.php       [NC]                     
RewriteRule .* /trafficticket.tv/Sites/public_html/forbidden.php [L,NC]

要使用任何其他 URL,唯一的要求是在重写规则中将正确的段路径添加到 /forbidden.php。在这种情况下,该段是

/trafficticket.tv/Sites/public_html

但它可以是任何东西,也可以什么都不是,就像原来的问题一样。

【讨论】:

感谢您的回答。你能告诉我 "RewriteCond %REQUEST_URI /[^.]+/?$ [NC]" 的目的是什么...不确定我是否理解这一行。 tk你 这是为了确保在满足 http://www.mysite.com/forbiddenFolder/subfolder 条件时该规则也适用。 对! - 非常感谢你。在你自己和@MichaelBerkowski 之间,我开始学习 mod_rewrite 是如何工作的。最困难的部分是它工作或失败,但与 php 或其他编程语言不同,它没有解释哪里/为什么。再次感谢您的帮助。 如果有更多指令,了解整个 .htaccess 文件会很有用。写一些垃圾来确保它被解析。确保 mod_rewrite 模块已启用。请求的 URL 结构在您的问题中保持模式非常重要:例如,http://www.mysite.com/forbiddenFolder/somefile.swf 而不是http://www.mysite.com/Otherfolder/folder/somefile.swf。为了进行测试,请将 [NC,L] 标志替换为 [R,NC,L] 以查看重定向的 URL,并确保在任何测试之前清除浏览器的缓存。我确信规则集可以正常工作,这不是问题。 @ereginator 在我的答案中添加了一个选项,显示如何修改规则以匹配不同的传入 URL 结构,例如您上一条评论中的那个。

以上是关于.htaccess 重定向,如果 url 中的文件夹名称的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess - 将所有 URL + 现有目录重定向到 index.php

如果 url 包含使用 htaccess 的特定字符串,则重定向

.htaccess 中的 301 重定向

使用 htaccess 重定向子域而不更改地址栏中的 URL

目录存在时htaccess重写url重定向

使用多个参数重定向 URL 以清除 .htaccess 中的 URL