RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/cache/$1-$2.html -f
RewriteRule ^(.*) /cache/$1-$2.html
RewriteRule !((.txt)|(.xml)|(.json)|(.html)|(.js)|(.mp4)|images|uploads\/(.*)|cache\/(.*)|resources\/(.*)|control\/(.*)|fonts\/(.*)|offline\/(.*)|stylesheets\/(.*)|libs\/(.*)|javascripts\/(.*))$ index.php [NC]
這是我的 htaccess 檔案。它應該為我的 /cache 檔案夾的快取檔案提供服務。
我面臨的問題是:我有一個類似site.com.br/blog/example-post/的網址 但我將此快取保存為blog-example-post.html
此外,如果沒有找到快取檔案,則打開 index.php 以控制所有請求。但是,使用快取我會減少我的服務器和資料庫請求。
有人可以幫我替換所有/從請求到-in htaccess嗎?
編輯:site.com.br/blog/my-post/amp/ 的可能解決方案(另存為:blog-my-post-amp.html
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/cache/$1-$2.html -f
RewriteRule ^([^/] )/([^/] )/$ /cache/$1-$2.html [NC,L]
RewriteRule ^([^/] )/([^/] )/([^/] )/$ /cache/$1-$2-$3.html [L]
更新:它現在對我有什么影響
RewriteCond %{DOCUMENT_ROOT}/cache/$1.html -f
RewriteRule ^([^/] )/$ /cache/$1.html [L]
RewriteCond %{DOCUMENT_ROOT}/cache/$1-$2.html -f
RewriteRule ^([^/] )/([^/] )/$ /cache/$1-$2.html [L]
RewriteCond %{DOCUMENT_ROOT}/cache/$1-$2-$3.html -f
RewriteRule ^([^/] )/([^/] )/([^/] )/$ /cache/$1-$2-$3.html [L]
RewriteCond %{DOCUMENT_ROOT}/cache/$1-$2-$3-$4.html -f
RewriteRule ^([^/] )/([^/] )/([^/] )/([^/] )/$ /cache/$1-$2-$3-$4.html [L]
RewriteCond %{DOCUMENT_ROOT}/cache/$1.xml -f
RewriteRule ^([^/] )/$ /cache/$1.xml [L]
RewriteCond %{DOCUMENT_ROOT}/cache/$1-$2.xml -f
RewriteRule ^([^/] )/([^/] )/$ /cache/$1-$2.xml [L]
RewriteCond %{DOCUMENT_ROOT}/cache/$1-$2-$3.xml -f
RewriteRule ^([^/] )/([^/] )/([^/] )/$ /cache/$1-$2-$3.xml [L]
RewriteCond %{DOCUMENT_ROOT}/cache/$1-$2-$3-$4.xml -f
RewriteRule ^([^/] )/([^/] )/([^/] )/([^/] )/$ /cache/$1-$2-$3-$4.xml [L]
我必須修復一些東西,也許優化代碼。當它達到100%時我會在這里更新
uj5u.com熱心網友回復:
RewriteCond %{DOCUMENT_ROOT}/cache/$1-$2.html -f RewriteRule ^(.*) /cache/$1-$2.html
這里明顯的問題是您有兩個反向參考,但只有一個捕獲子模式。$2因此總是空的。如果您期待表單的請求/blog/example-post/,它應該映射到快取檔案/cache/blog-example-post.html,那么規則應該看起來更像這樣:
:
RewriteRule ^([^/] )/([^/] )/$ /cache/$1-$2.html [L]
不要忘記L國旗。
更新:
編輯:(
example.com/blog/my-post/amp/另存為blog-my-post-amp.html:)的可能解決方案RewriteCond %{DOCUMENT_ROOT}/cache/$1-$2.html -f RewriteRule ^([^/] )/([^/] )/$ /cache/$1-$2.html [NC,L] RewriteRule ^([^/] )/([^/] )/([^/] )/$ /cache/$1-$2-$3.html [L]
RewriteCond(條件) 僅適用于隨后的第一個指令RewriteRule(它們一起形成一個規則)。因此,第二個RewriteRule無條件地重寫請求,無論快取檔案是否存在。
你需要重復條件。例如:
RewriteCond %{DOCUMENT_ROOT}/cache/$1-$2.html -f
RewriteRule ^([^/] )/([^/] )/$ /cache/$1-$2.html [L]
RewriteCond %{DOCUMENT_ROOT}/cache/$1-$2-$3.html -f
RewriteRule ^([^/] )/([^/] )/([^/] )/$ /cache/$1-$2-$3.html [L]
另外:第一條規則上的NC( nocase) 標志是多余的,因為正則運算式^([^/] )/([^/] )/$自然是不區分大小寫的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484494.html
