AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1048074
Accepted
Deeh
Deeh
Asked: 2020-12-31 10:16:14 +0800 CST2020-12-31 10:16:14 +0800 CST 2020-12-31 10:16:14 +0800 CST

RewriteRule 冲突和斜杠

  • 772

我们正在将网站迁移到我们的 cPanel 基础架构。客户使用 Nginx 在自己的基础架构上托管网站。他将他的 Nginx 配置文件发送给我们,我们将它们转换为 Apache Rewrite 规则。最终结果(仅显示相关行)如下所示:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ouvidoria/$ /ouvidoria/index.php
RewriteRule ^([^/\.]+)/?$ index.php?id=$1 [L]
RewriteRule ^news\/(.*)/?$ noticias.php?id=$1 [L]

一切都按预期工作,除了一页,即/ouvidoria. 此特定页面在 public_html 上有一个同名目录,因此 RewriteRule 指向该ouvidoria/index.php文件。问题是,由于某种原因,当我们访问/ouvidoria我们被重定向到的 URL时/ouvidoria/?id=ouvidoria,这似乎属于倒数第二条规则。所以这是第一个要解决的问题。

第二个是我们可以使用尾部斜杠 ( /ouvidoria/) 访问 URL,它不会附加?id=ouvidoria,但是,该网站的开发方式是根据 URL 加载侧边菜单。它只会在没有斜杠的情况下加载。即使我们从第一个问题中删除有问题的规则(这不是解决方案,因为在其他页面中需要它),它也会重定向/ouvidoria到/ouvidoria/,因此无法加载菜单。

任何有关如何使这些规则起作用的帮助将不胜感激。

编辑:

剩下的唯一问题是从/ouvidoriato重定向/ouvidoria/。网络标签截图:

网络选项卡

重定向细节:

重定向详细信息

url nginx mod-rewrite apache2
  • 2 2 个回答
  • 251 Views

2 个回答

  • Voted
  1. Tero Kilkanen
    2020-12-31T10:31:06+08:002020-12-31T10:31:06+08:00

    更新了解决“重定向到子目录”问题的答案。尝试以下指令集:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ouvidoria/?$ /ouvidoria/index.php [L]
    RewriteRule ^([^/\.]+)/?$ index.php?id=$1 [L]
    RewriteRule ^news\/(.*)/?$ noticias.php?id=$1 [L]
    

    通过删除RewriteCond %{REQUEST_FILENAME} !-d,Apache 不会检查具有所请求资源的目录是否存在。这可能有助于解决您的问题。


    原答案:

    自从我使用 Apache 规则以来已经有一段时间了,但我认为以下更改将帮助您实现目标:

    代替

    RewriteRule ^ouvidoria/$ /ouvidoria/index.php
    

    和

    RewriteRule ^ouvidoria/?$ /ouvidoria/index.php [L]
    

    规则的原始版本仅匹配/ouvidoria/URI。因此,请求到达 second RewriteRule,这会导致您描述的行为。

    规则的固定版本同时匹配/ouvidoria/和/ouvidoria。

    • 1
  2. Best Answer
    Deeh
    2021-01-05T10:03:35+08:002021-01-05T10:03:35+08:00

    好吧,由于某种原因,该指令DirectorySlash Off现在起作用了。我之前已经尝试将其设置为关闭,但它会生成错误 500。我已经多次重写这些规则,也许我删除了与 DirectorySlash 冲突的东西,现在该指令按预期工作。

    还要感谢@Tero Kilkanen 帮助我解决了第一个问题。

    • 0

相关问题

  • Sane Sharepoint 2007 网址

  • IIS 7 中的 URL 重写

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • 如何将 URL 添加到 wiki (MediaWiki) 支持的文档?

  • 如何强制我的网址始终以 www 开头?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve