.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 的特定字符串,则重定向