2013-03-18 41 views
3

我無法在SO上找到完全相同的問題。我希望有人能幫助我解決這個問題。重寫規則以從URI中刪除所有非字母數字符號

說,用戶輸入http://www.example.com/abc#!def,我想要做的是刪除${REQUEST_URI}部分中的所有符號,然後重定向到http://www.example.com/abcdef。問題是這些符號可能出現在字符串的任何地方,例如#ab!cdegabcdef#!都應該重定向到abcdef

如果我是正確的,mod_rewrite沒有字符串替換功能,所以這似乎是不可能的,但我是正確的嗎?

+0

我相信你是正確的 - 你需要將這個URI傳遞給腳本進行進一步處理,然後將結果傳遞給301重定向。 – 2013-03-18 05:34:16

+0

@MikeAnthony,等等,我認爲這是可能的。我可以使用N標誌。沒有? http://httpd.apache.org/docs/current/rewrite/flags.html#flag_n – CookieMonster 2013-03-18 09:29:41

+0

我沒有測試過,但我認爲它可以工作。這似乎很合理......讓我們看看它是否有效。 – 2013-03-18 12:34:04

回答

2

您可以使用RewriteCondRewriteRule中的regular expressions捕獲URL的特定部分,但不能刪除任意字符。

此外,您永遠不會在網址中看到hash character '#'及其後的所有內容,因爲它被客戶端用於導航到文檔的特定部分。使用

更新next標誌:

RewriteRule (.*)[^a-zA-Z](.*) $1$2 [N] 

該規則可刪除所有字符,這是不^字母。

+0

嗨,謝謝你的回答。我想我可以使用N標誌(請參閱[這裏](http://httpd.apache.org/docs/current/rewrite/flags.html#flag_n))。我會搗鼓它,讓你知道。同時,如果有人已經知道它的工作原理,請告訴我們。儘管在PHP中使用它可能會更快。我聽說.htaccess速度很慢,如果可能,應該避免使用它。 – CookieMonster 2013-03-18 09:37:42

+0

@CookieMonster這是一個好主意,我沒有想到這一點。請參閱最新的答案。 – 2013-03-18 09:43:11

+0

嗯,奇怪。我嘗試過你的例子,也是Apache文檔中顯示的那個例子,即ewriteRule(。*)A(。*)$ 1B $ 2 [N],但它們都不起作用。這可能是由於我的服務器設置...?我使用運行Apache 2.4.3的Linux 1.8.1的XAMPP。 – CookieMonster 2013-03-19 04:22:11

相關問題