首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >前端控制器和`301永久迁移的Apache ModRewrite规则`

前端控制器和`301永久迁移的Apache ModRewrite规则`
EN

Stack Overflow用户
提问于 2020-11-05 07:17:16
回答 1查看 17关注 0票数 0

我现在正在做的事情

我正在为一个客户开发一个后端。

之前,他将网站数据与下载的文件混合在一起,供朋友或其他目的下载。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
/public
    /somedir
        somesubdirfile
    anotherfile1
    anotherfile2
    foobar.html
    index.html

现在,我实现了通用重写规则,将所有请求代理到网站的新index.php

.htaccess

代码语言:javascript
代码运行次数:0
运行
复制
<IfModule mod_rewrite.c>
    RewriteEngine "On"

    RewriteCond "%{REQUEST_FILENAME}" ".htaccess"
    RewriteCond "%{REQUEST_FILENAME}" ".htpasswd"
    RewriteCond "%{REQUEST_FILENAME}" "!-s"
    RewriteCond "%{REQUEST_FILENAME}" "!-l"
    RewriteCond "%{REQUEST_FILENAME}" "!-d"
    RewriteRule "^.*$" "public/index.php" [NC,L]
</IfModule>

很好,行得通。

现在我把所有的杂物都移到了一个单独的文件夹中。

代码语言:javascript
代码运行次数:0
运行
复制
/resources
    /somedir
        somesubdirfile
    anotherfile1
    anotherfile2
    foobar.html
/public
    index.php

我需要满足的需求

..。就是改变重写规则。

如果请求与/public中的特定文件或符号链接不匹配,则必须测试它是否与/resources中的特定文件或符号链接匹配。如果匹配,则必须发送301 Moved Permanently,并将请求重定向到/resources。如果没有匹配,则必须重定向到public/index.php

但我真的坚持理解如何像我所要求的那样在复杂的情况下编写适当的重写规则。

我需要一些帮助,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-11-05 14:17:11

您可以在站点根.htaccess中尝试以下规则:

代码语言:javascript
代码运行次数:0
运行
复制
RewriteEngine On

# if it exists in /resources then redirect
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/resources/$0 -f
RewriteRule .+ /resources/$0 [L,NE,R=301]

# else route to public/index.php
RewriteCond %{REQUEST_URI} \.(htaccess|htpasswd) [NC]
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ public/index.php [L]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64689043

复制
相关文章

相似问题

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