我試圖編寫一個多語言網站的規則。例如,www.hostname.com/fr & www.hostname.com/de都可以,但嘗試使用其他語言標記應重定向到www.hostname.com/en。 www.hostname.com/it重定向到www.hostname.com/en,www.hostname.com/es重定向到www.hostname.com/en等...在htaccess工作中不能做出負面的條件
我成功地制定了一些規則「積極」的方式,但每次我加一個!創造一個負面的規則,它不起作用。
例如:
RewriteCond %{HTTP_HOST} ^www.hostname.com$
RewriteCond %{REQUEST_URI} ^/?([a-z]{2})/?$
RewriteCond %{REQUEST_URI} ^/?(fr|de)/?$
RewriteRule (.*) http://www.hostname.com/en [L,R=301]
此代碼重定向一切hostname.com/en。我希望只有標籤不同於fr et de重定向到en。所以我試過了:
RewriteCond %{HTTP_HOST} ^www.hostname.com$
RewriteCond %{REQUEST_URI} ^/?([a-z]{2})/?$
RewriteCond %{REQUEST_URI} !^/?(fr|de)/?$
RewriteRule (.*) http://www.hostname.com/en [L,R=301]
剛剛加了個!但它不起作用,URL永遠不會重定向。我可能在編寫規則時遺漏了一些東西......
當我在http://htaccess.madewithlove.be進行測試時,您的否定規則完全按預期工作。但是,你將在'en'上有一個重寫循環。你可能需要用'^ /!?(FR | DE | EN)?/ $'此外,REQUEST_URI應該總是用'/'所以''使它可選的是沒有必要的開始。 – 2013-04-08 16:16:34
我同意Michael Berkowski。您正在遭受無限循環,因爲/ en路徑正被重定向到自身。 mod_rewrite中的'L'標誌並不像很多人想象的那樣。即使是重寫URL要經過從頂部的httpd.conf或的.htaccess的指令,以及'L'標誌不阻止這種情況發生。 – Bobulous 2013-04-08 18:48:59