2015-02-06 57 views
1

我使用的Apache2以下的(好).htaccess在我的網站的根目錄,合併新的mod_rewrite規則並保留舊的行爲,出了什麼問題?

#OLD (GOOD, IS WORKING!) 
# If requested url is an existing file or folder, don't touch it 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule . - [L] 

RewriteRule ^(urn|URN):(.+)$  index.php?urn=$2 [L] 
RewriteRule ^([a-zA-Z\d\-]+)$ index.php?obj=$1 [L] 

現在我需要合併的文件夾的新條件XWiki實現

#NEW: some conflicts, how to preserve old and add /xWiki* behaviour? 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^xWiki/?(.*)$ /xWiki/index.php?title=$1 [L,QSA] 

如何「合併「保留舊的行爲除了/xWiki

只有加入RewriteRule ^xWiki/?(.*)$沒有行爲和!-f與同-f COND衝突......

回答

1

有這樣說:

#OLD (GOOD, IS WORKING!) 
# If requested url is an existing file or folder, don't touch it 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule . - [L] 

RewriteRule ^xWiki/(.*)$ /xWiki/index.php?title=$1 [L,QSA] 

RewriteRule ^(urn|URN):(.+)$  index.php?urn=$2 [L,QSA] 
RewriteRule ^([a-zA-Z\d\-]+)$ index.php?obj=$1 [L,QSA] 

編輯:問題是回答,這是解決方案!僅編輯變更的投票以進行投票。

  • 主要問題是放置在正確的位置的RewriteRule(其他的RewriteRules前),並undertand有與-f!-f沒有衝突(在-f沒有變化是合併方案)。
  • 一個很好的優化是將正則表達式^xWiki/?(.*)$更改爲^xWiki/(.*)$
+0

Plase閱讀這個問題,正如我所說,「只添加RewriteRule'^ xWiki/?(.*)$'不起作用」...請解釋爲什麼您認爲它必須工作,或者更多可以錯了,不適合我。 – 2015-02-07 08:16:19

+0

你真的相信我沒有閱讀而回答嗎?爲什麼我相信這個答案是有效的,因爲有兩個原因:1)正確的規則順序,其中'xwiki'規則必須在第一個忽略規則之後,2)規則中正確的正則表達式,其中'^ xWiki/?(.*)$'將會也可以匹配'/ xWiki-123-foo'不只是'/ xWiki /' – anubhava 2015-02-07 08:19:04

+0

真正的問題是正則表達式xWiki /(.*)'不僅僅匹配'/ xWiki/abc'它也匹配重寫的URI,即'/ xWiki/index.php'沒有'RewriteCond%{REQUEST_FILENAME}!-f'條件的保護。因爲我將它放在'file/folder'規則的下面,這就是爲什麼它沒有'RewriteCond%{REQUEST_FILENAME}!-f'條件就會工作。 – anubhava 2015-02-07 08:30:52