亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從代碼簽名中刪除和重定向索引.php

從代碼簽名中刪除和重定向索引.php

PHP
慕桂英546537 2022-09-17 15:34:14
我有一個舊項目,它有一些奇怪的問題。其代碼簽名器項目(版本 2.X)。谷歌正在用索引索引我們的網址.php?。下面是一個示例https://www.website.com/index.php?/my-seo-friendly-uri我可以從上面的URL和另外2個變體中看到我的頁面,如下所示https://www.website.com/index.php/my-seo-friendly-urihttps://www.website.com/my-seo-friendly-uri我們在整個網站中使用過。https://www.website.com/my-seo-friendly-uri我的問題是我如何重定向和到?https://www.website.com/index.php?/my-seo-friendly-urihttps://www.website.com/index.php/my-seo-friendly-urihttps://www.website.com/my-seo-friendly-uri我已經做過的事情<IfModule mod_rewrite.c>RewriteEngine OnRewriteRule ^index.php/(.*)$ /$1 [R=302,L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php?/$1 [L] </IfModule>這會重定向到正常網址,但網址的版本仍未重定向index.phpindex.php?在我的 中,我有以下設置config.php$config['index_page'] = '';$config['uri_protocol'] = 'REQUEST_URI';
查看完整描述

1 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

https://www.example.com/index.php?/my-seo-friendly-uri

此 URL 包含一個查詢字符串,因此需要一個稍有不同的規則才能匹配它。該模式僅與 URL 路徑匹配(在本例中)。查詢字符串在其自己的變量中可用。RewriteRuleindex.php


在現有指令之前添加以下內容(除了匹配的指令 - 作為路徑信息傳遞):/index.php/my-seo-friendly-url


# Redirect URLs of the form "/index.php?/my-seo-friendly-uri"

# And "/?/my-seo-friendly-uri"

RewriteCond %{ENV:REDIRECT_STATUS} ^$

RewriteCond %{QUERY_STRING} ^(/.*)

RewriteRule ^(index\.php)?$ %1 [QSD,R=302,L]

捕獲查詢字符串(第 2 個條件),并使用反向引用 () 來構造重定向。%1


為了防止重定向循環,需要針對環境變量進行檢查的第一個條件,因為您似乎在稍后的重寫中使用查詢字符串方法來路由代碼字符 URL。env var 在初始請求中為空,但在首次成功重寫后設置為“200”(如 200 OK HTTP 狀態)。REDIRECT_STATUSREDIRECT_STATUS


需要標志 (Apache 2.4+) 才能從重定向請求中丟棄原始查詢字符串。如果您仍在使用 Apache 2.2,請改為將一個(空查詢字符串)附加到替換字符串中。即。QSD?%1?


通過使匹配可選(即),它還將規范省略的URL,但仍包括查詢字符串(當前可能是也可能不是問題)。例如。.index.php^(index\.php)?$index.php/?/my-seo-friendly-uri


請注意,這當前是 302(臨時)重定向(與現有重定向一樣)。只有在確認它工作正常后,才將其更改為301(永久)重定向,301由瀏覽器永久緩存,因此可能會使測試出現問題。


總結

您的文件應如下所示:.htaccess


RewriteEngine On


# Query string...

# Redirect URLs of the form "/index.php?/my-seo-friendly-uri"

# And "/?/my-seo-friendly-uri"

RewriteCond %{ENV:REDIRECT_STATUS} ^$

RewriteCond %{QUERY_STRING} ^(/.*)

RewriteRule ^(index\.php)?$ %1 [QSD,R=302,L]


# Path-Info...

# Redirect URLs of the form "/index.php/my-seo-friendly-uri"

# Also handles "/index.php" only

RewriteCond %{ENV:REDIRECT_STATUS} ^$

RewriteRule ^index.php(?:/(.*))?$ /$1 [R=302,L]


# CodeIgniter Front-controller

# (NB: Using query string method to pass the URL)

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule (.*) index.php?/$1 [L]

附加說明...

  • 包裝器不是必需的。<IfModule>

  • (.*)與因為正則表達式在默認情況下是貪婪的一樣。^(.*)$

  • 我已經修改了您現有的路徑信息重定向(即)以僅重定向請求。這現在需要一個額外的條件來避免重定向循環。/index.php/foo/index.php

  • 您的 CodeIgniter 前端控制器正在使用查詢字符串方法傳遞到后端(如問題中所用)。但是,您已經設置了 - 這與此相矛盾(盡管不一定是問題)。但是,如果您使用的是該方法,則可以從最終替換字符串的末尾刪除部件。例如:/my-seo-friendly-url$config['uri_protocol'] = 'REQUEST_URI';REQUEST_URI?/$1RewriteRule

    例如,從這個:

    RewriteRule (.*) index.php?/$1 [L]

    對此:

    RewriteRule . index.php [L]


查看完整回答
反對 回復 2022-09-17
  • 1 回答
  • 0 關注
  • 102 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號