現在我在做這樣的事情:MOD-重寫:改變所有的URL
RewriteRule ^/?logout(/)?$ logout.php
RewriteRule ^/?config(/)?$ config.php
我寧願有一個規則,會做同樣的事情,每個網址,所以我不每次添加新文件時都不得不添加它們。
此外,如果可能,我喜歡將'/ config/new'與'config_new.php'匹配。我猜一些正則表達式會讓我做到這一點?
感謝Stack Addicts!
現在我在做這樣的事情:MOD-重寫:改變所有的URL
RewriteRule ^/?logout(/)?$ logout.php
RewriteRule ^/?config(/)?$ config.php
我寧願有一個規則,會做同樣的事情,每個網址,所以我不每次添加新文件時都不得不添加它們。
此外,如果可能,我喜歡將'/ config/new'與'config_new.php'匹配。我猜一些正則表達式會讓我做到這一點?
感謝Stack Addicts!
嘗試:
重寫規則^ /(\ w +)/ $ $ 1.PHP
的$ 1括號內的第一捕獲字符串的內容?。第二斜線周圍的括號不需要。
編輯:對於另一場比賽中,試試這個:??
重寫規則^ /(\ w +)/(\ w +)/ $ $ 1_ $ 2.PHP
國防部重寫不能做(潛在的)無限的替換,就像你想在你的問題的第二部分所做的那樣。但在Apache URL Rewriting Guide底部檢查出外部重寫引擎:
外部重寫引擎
說明:
一個常見的問題:我們怎樣才能解決FOO/BAR/QUUX /等。問題?使用mod_rewrite似乎沒有解決方法... 解決方案:
使用外部RewriteMap,即像RewriteMap一樣工作的程序。它在Apache啓動時運行一次,在STDIN上收到請求的URL,並且必須將結果(通常是重寫的)URL放在STDOUT上(相同的順序!)。
RewriteEngine on RewriteMap quux-map prg:/path/to/map.quux.pl RewriteRule ^/~quux/(.*)$ /~quux/${quux-map:$1} #!/path/to/perl # disable buffered I/O which would lead # to deadloops for the Apache server $| = 1; # read URLs one per line from stdin and # generate substitution URL on stdout while (<>) { s|^foo/|bar/|; print $_; }
這是一個示範的,例如,只是重寫所有的URL /〜QUUX /富/ ...到/〜QUUX /酒吧/ ......其實你可以編寫任何你喜歡的。但請注意,雖然這樣的地圖也可以由普通用戶使用,但只有系統管理員才能定義它。
我會做這樣的事情:
RewriteRule ^/?(logout|config|foo)/?$ $1.php
RewriteRule ^/?(logout|config|foo)/(new|edit|delete)$ $1_$2.php
我更明確列出的URL我想匹配,所以,我不擔心靜態內容或以後增加新的東西,不需要重寫到php文件。
以上是確定的,如果所有子網址的適用於所有根的URL(book/new
,movie/new
,user/new
),但不是那麼好,如果你想有不同的子網址取決於根動作(logout/new
沒有多大意義)。您可以使用更復雜的正則表達式處理該問題,或者將所有內容都路由到單個php文件,該文件將根據url確定要包含和顯示的文件。
哦,是的,我做了一次,以支持用戶名子域名;)很好玩。 – Aeon 2008-09-19 19:08:27