并感謝閱讀我。我的目標是在本地和生產環境中使用相同的 htaccess 代碼。首先,我需要將 example.com/index.php?action=somepage 重寫為 example.com/somepage。其次,我必須將http://example.com重寫為https://example.com,但僅限于生產環境,而不是本地主機。到目前為止,這是我的代碼:
RewriteEngine on
RewriteBase /
# For Ionos
RewriteRule ^([0-9a-zA-Z/\ -] )(?:&([0-9a-zA-Z&=_\ -] ))?$ index.php?action=$1&$2
# $1 : route name and framework parameters
# $2 : classic $_GET parameters (¶m=value)
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=301]
當我使用 https:// 連接時,沒問題,關于索引和操作的第一條規則適用。當我使用 http:// 時,地址變為 https://,但索引/操作規則不適用。
非常感謝!
編輯:這有效:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R=301]
# For Ionos, http => https
RewriteRule ^([0-9a-zA-Z/\ -] )(?:&([0-9a-zA-Z&=_\ -] ))?$ index.php?action=$1&$2
# $1 : route name and framework parameters
# $2 : classic $_GET parameters (¶m=value)
但我有最后一個問題。我的檔案夾是這樣的:
[] example
...[]public
......htaccess
...htaccess
上面顯示的代碼是公共目錄的htaccess。示例目錄的 htaccess 重定向到公共:
RewriteEngine on
RewriteBase /
# for Ionos
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
問題是http://example.com重定向到https://example.com,http://example.com/somepage重定向到https://example.com/public/somepage并且我無法洗掉“公共”部分。
謝謝!
uj5u.com熱心網友回復:
你的兩條規則“是”錯誤的順序。您的外部重定向(HTTP 到 HTTPS)需要在內部重寫之前。您的第一條規則(重寫)仍然適用,但它會導致外部重定向index.php?action=...(暴露您的內部檔案/URL 結構)。
但是,您也缺少L這兩條規則的標志。
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC] RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R=301]
如果這是在/public/.htaccess檔案中并且/public子目錄是隱藏的(即它正在內部重寫),那么您需要將其更改RewriteRule為讀取:
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
在請求被父配置內部重寫后,REQUEST_URI服務器變數包含完整的 URL 路徑,包括“隱藏”/public子目錄,所以如果你重定向到REQUEST_URI它會暴露隱藏的子目錄。然而,如果您使用對匹配RewriteRule 模式的反向參考,它與相對于當前目錄的 URL 路徑匹配,那么這自然會排除/public子目錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425149.html
