[英].htaccess conditional rewrite/redirect
我在設置重定向時遇到了麻煩。 我在某些目錄中有索引頁,目錄名是簡單的六個字符長的標記,例如ABCDEF。 名稱是字母數字和所有大寫字母。 我最初想要的是將包含令牌的所有流量(小寫和大寫)定向到正確的目錄。 我無權訪問服務器模塊,例如mod_speling,因此我使用php腳本進行實際的URL重寫。 有用。 但隨后我想再增加一個步驟,以引導所有流量,例如:
example.com/ABCDEF
example.com/abcdef
example.com/reference/abcDEF
example.com/referENces/ABCdeF
到目錄:
example.com/references/ABCDEF/
我無法完成這些工作,我的重定向一直都處於循環中。
我的htaccess中有什么:
# takes care of: example.com/abcdef
RewriteCond %{DOCUMENT_ROOT}/references/%{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} ^(/?)([a-zA-Z0-9]{6})(/?)$
RewriteRule ^(/?)([a-zA-Z0-9]{6})(/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
# takes care of example.com/reference/abcDEF
RewriteCond %{REQUEST_URI} ^(/?)([REFNCS?refncs?]{9})/([a-zA-Z0-9]{6})(/?)$
RewriteRule ^(/?)([REFNCS?refncs?]{9})/([a-zA-Z0-9]{6})(/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
# this should take care of: example.com/references/abcDEF , but if I uncomment it, we end up in a loop
#RewriteCond %{REQUEST_URI} ([REFNCSrefncs]{10})/([a-zA-Z0-9]{6})(/?)$
#RewriteRule ([REFNCSrefncs]{10})/([a-zA-Z0-9]{6})(/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
# Finally this handles: example.com/ABCDEF
RewriteCond %{DOCUMENT_ROOT}/references/%{REQUEST_URI} -d
RewriteCond %{REQUEST_URI} ^(/?)([a-zA-Z0-9]{6})(/?)$
RewriteRule ^(/?)([a-zA-Z0-9]{6})(/?)$ example.com/references%{REQUEST_URI} [QSA,L,NC,R=302]
在這一點上,我確信必須有一個更好,更通用的正則表達式解決方案。 第二和第三塊可以以某種方式合並。
彼得
嘗試更改:
RewriteCond %{REQUEST_URI} ([REFNCSrefncs]{10})/([a-zA-Z0-9]{6})(/?)$
RewriteRule ([REFNCSrefncs]{10})/([a-zA-Z0-9]{6})(/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
至:
RewriteCond %{REQUEST_URI} ^(\/?)([REFNCSrefncs]{10})\/([a-zA-Z0-9]{6})(\/?)$
RewriteRule ^(\/?)([REFNCSrefncs]{10})\/([a-zA-Z0-9]{6})(\/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
看起來像這樣:
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} ^(/?)([REFNCSrefncs]{10})/([a-zA-Z0-9]{6})(/?)$
RewriteRule ^(.*)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} ^(/?)([REFNCrefnc]{9})/([a-zA-Z0-9]{6})(/?)$
RewriteRule ^(.*)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
我必須更改([REFNCSrefncs] {10})和([REFNCrefnc] {9})的順序。
感謝您的提示!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.