我们正在将网站迁移到我们的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-51 #
- 2021-1-52 #
好吧,出于某种原因,指令
DirectorySlash Off
现在工作了.我之前已经尝试过将其设置为关闭,但会产生错误500。我已经多次重写了这些规则,也许我删除了与DirectorySlash冲突的内容,现在该指令按预期工作了。还要感谢@Tero Kilkanen帮助我解决了第一个问题。
已更新答案,以解决地址"重定向至 子目录"问题.尝试以下一组指令:
通过删除
RewriteCond %{REQUEST_FILENAME} !-d
,Apache不会检查包含所请求资源的目录是否存在.这可能会帮助您解决问题。原始答案:
自从我使用Apache规则已经有一段时间了,但是我认为以下更改将帮助您实现目标:
替换
使用
该规则的原始版本仅与
/ouvidoria/
匹配 URI.因此,请求到达第二个RewriteRule
,这会导致您描述的行为。规则的固定版本与
/ouvidoria/
都匹配 和/ouvidoria