首頁>Program>source

我正在尝試編寫一些RewriteRules,以便当請求包含特定的查詢引數時,我们將其稱為 foo ,則將其完全忽略(删除).原因是我需要使用 foo 內部在另一个RewriteRule中,以便我可以將資訊傳遞给前端控製器.如果 foo 如果已经存在,則该應用程式將無法按預期執行.我尝試了多種解決方案,例如一个,但這並没有達到我想要實現的目標.到目前為止,我尝試了以下操作:

<IfModule mod_rewrite.c>
RewriteEngine On
# Remove possible existing query parameter called 'foo'
RewriteCond %{QUERY_STRING} ^(.*)&?foo=[^&]+&?(.*)$ [NC]
RewriteRule ^(.*)$ /$1?%1%2 [R=301,L]
# Lead every page/API request to index.php
RewriteCond $1 !\.(svg|jpg|png|webp|ico|css|js|ttf|woff|woff2)$
RewriteRule ^(.*)$ index.php?foo=$1 [L,QSA]
</IfModule>

基本上,每个未以列出的檔案擴充套件名之一結尾的請求都應傳遞给我的前端控製器.没有第5行和第6行,只要没有 foo,一切都可以正常工作 原始請求中存在查詢引數。

有没有办法删除 foo 引數而不会影响其他RewriteRule(或者只是在第二部分中對其进行覆盖)? 預先感谢!

Edit

仅需澄清一些事情:在我的應用程式中,前端控製器是一个PHP指令碼,它采用了重寫的GET引數 foo ,其中包含最初請求的網址.但是,如果使用者添加 foo 根据要求,我必须確保這不是 foo 该引數將被傳遞到前端控製器,因為该應用程式隨後將無法正常執行。

例如:如果客戶要求 https://example.com/something?foo=123&bar=456 ,该請求應重定向到 https://example.com/something?bar=456 (或根本不重定向)和查詢引數 foo 第9行(仅供我的前控製器使用)應该為 https://example.com/somethingbar 没有改變.不幸的是,上面的代碼無法做到這一點.相反,我被重定向到了 https://example.com/index.php?bar=456 .我猜该解決方案實際上非常簡單,但是我無法找到解決方法。

最新回復
  • 7月前
    1 #

    請尝試以下方法.請在測試URL之前確保清除瀏覽器快取.考虑到這裏,您需要 &之後的一切 在查詢字元串中傳遞给此處的重寫URL.从OP的htaccess檔案中添加了2條現有規則,並將https規則的位置更改為第一位。

    RewriteEngine ON
    ##From OP's comments adding these here, http --> https should come first.
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [R=301,L]
    # Remove possible existing query parameter called 'foo'
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteCond %{QUERY_STRING} ^foo=.*&(.*)$
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}?%1 [NE,L]
    # Lead every page/API request to index.php
    RewriteCond $1 !\.(svg|jpg|png|webp|ico|css|js|ttf|woff|woff2)$
    RewriteRule ^(.*)$ index.php?foo=$1 [L,QSA]
    

  • node.js:我如何获得已完成的考試數量
  • sql:是否可以在不使用太多邏輯運算符的情况下在一个查詢中删除postgreSQL陣列的所有值?