簡體   English   中英

.htaccess有條件的重寫/重定向

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM