首页>Server>source

我们正在将网站迁移到我们的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 我们被重定向到 /ouvidoria/?id=ouvidoria的URL ,这似乎是倒数第二个规则.因此,这是要解决的第一个问题。

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

对于使这些规则生效的任何帮助,将不胜感激。

编辑:

唯一的问题是从 /ouvidoria重定向 到 /ouvidoria/ .网络标签屏幕截图:

重定向详细信息:

最新回答
  • 2021-1-5
    1 #

    已更新答案,以解决地址"重定向至 子目录"问题.尝试以下一组指令:

    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.因此,请求到达第二个 RewriteRule ,这会导致您描述的行为。

    规则的固定版本与 /ouvidoria/都匹配 和 /ouvidoria

  • 2021-1-5
    2 #

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

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

  • amazon web services:在AwS上,重新启动后我将nginx安装到/ usr / local中,安装消失了
  • dkim:opendkim-testkey:密钥不安全