首頁>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/ .網路標簽螢幕截圖:

重定向详细資訊:

最新回復
  • 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

  • 5月前
    2 #

    好吧,出於某種原因,指令 DirectorySlash Off 現在工作了.我之前已经尝試過將其設置為關闭,但会产生錯誤500。我已经多次重寫了這些規則,也许我删除了与DirectorySlash冲突的內容,現在该指令按預期工作了。

    還要感谢@Tero Kilkanen帮助我解決了第一个問题。

  • amazon web services:在AwS上,重新啟動後我將nginx安裝到/ usr / local中,安裝消失了
  • dkim:opendkim-testkey:密钥不安全