2012-02-12 64 views
0

可能有人檢查這個表達式我寫的,它做什麼,我想實現,但我不知道這是否是做了正確的方式,如果它不漲正則表達式在.htaccess結合兩個消極條件

放緩的一切

這是它應該做的:

如果URL路徑是不是隻 ,如果它不包含字符串「/德」或「/ EN」開頭 THEN 301它涉及的領域不再域只有

這就是我寫的:

RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ 
RewriteCond %{HTTP_HOST} ^(?!.*(/de|/en)) 
RewriteRule .* http://example.com/ [L,R=301] 

...有沒有更好的方法來實現這一目標?

謝謝! 烏爾斯

+0

'URL路徑比只有域更長'。你是什​​麼意思?原因mod_rewrite無法檢查文本長度。 – Gerben 2012-02-12 13:03:53

回答

2

我假設你做了一個「mindfart」,第二COND應該讀%{REQUEST_URI}否則它沒有任何意義,因爲HTTP_HOST永遠不會包括/

在運行時,它使得差異很小,但它是如果寫成更容易理解

RewriteCond %{REQUEST_URI} !(/de|/en) 
+0

不介意,只是一無所知:-) – Urs 2012-02-13 21:23:58

+0

我再次反思我想做什麼,它比我上面所描述的更簡單:如果REQUEST_URI不以/ de或/ en開頭,則在前面添加/ de的。你能幫我做到嗎? (也可能指向我一個很好的mod_rewrite教程)? – Urs 2012-02-13 21:27:26

+0

在規則模式\中使用所謂的負向前瞻斷言(\ [(http://www.regular-expressions.info/lookaround.html)\)。 'RewriteRule ^(?! de /)(?! en /).* - [L]'。 (在'.htaccess'文件中的規則模式中沒有前導'/')。使用[這個腳本](http://stackoverflow.com/questions/9153262/tips-for-debugging-htaccess-rewrite-rules/9261963#9261963)來玩規則模式。至於教程,這就是所謂的Google。我在Google存在之前就知道他們了。大聲笑。請享用!! – TerryE 2012-02-13 23:27:55