我個人很喜歡the rewrite rule intro什麼,這是非常好做,並有圖像描述與重寫會發生什麼哪非常方便。
正如hakre在評論中所說的,httpd aka apache使用PCRE,它幾乎是perl使用的,並且php preg_*
。
有許多方法可以存檔您想要的東西。
mysite.com/index.php?lang=en
要
mysite.com/en
第一種是通過創建一個內部重定向和變更鏈接到它,這是最簡單和常用的方法。
此方法允許您訪問mysite.com/en
,同時爲您提供內部重定向mysite.com/index.php?lang=en
的內容。
但是,它不會阻止您訪問舊網址或重定向該網址。
下面是一個例子:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/?$ /index.php?lang=$1 [L]
另一種方法是將其他的URL與內部重寫它一起重定向。
所以,如果你訪問:
mysite.com/index.php?lang=en
它會帶你到:
mysite.com/en
同時給你的mysite.com/index.php?lang=en
內容。
下面是一個例子:
# External redirect
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?lang=([^\s&]+) [NC]
RewriteRule^/%1? [R=301,L]
# Internal redirect
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/?$ /index.php?lang=$1 [L]
從這些規則排除存在的文件,你可以使用這些條件:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
上述2個條件告訴它只能重定向如果文件和文件夾不存在。
我認爲文檔是你永遠需要誠實的。 –
您粘貼的文檔鏈接非常棒。接下來的事情是啓用[RewriteLog](http://httpd.apache.org/docs/current/mod/mod_rewrite.html#logging),這樣你就可以看到你的錯誤。最後,你需要熟悉正則表達式。 –
您鏈接了一條單獨的指令,可以很好地閱讀關於指令(設置)的所有技術規範。詳細的文檔在這裏(和有圖片):http://httpd.apache.org/docs/current/rewrite/ – hakre