2012-07-15 39 views
1

我正在學習如何爲.htaccess重定向編寫正則表達式。 到目前爲止,我設法弄清楚了我需要的所有東西,除了一些正常表達式不符合我的預期外。我正在使用桌面應用程序測試我的正則表達式,並且它們在那裏正常工作,但不在.htaccess文件中。爲什麼我的RewriteRule在URL中有'?`時不起作用

FYI:將RewriteBase設置爲/site/

這是輸入網址: /site/view-by-tag/politics/?el_mcal_month=3&el_mcal_year=2009

我想抓住 「政治」,並重定向到/site/tags/politics/

下面是我用什麼:

RewriteRule ^view-by-tag/([a-zA-Z\-]+)/([a-zA-Z0-9\-\/\.\_\=\?\&]+) /tags/$1/ [R=301,L]

我在politics之後添加了所有字符的捕獲,因爲我遇到的問題是,當URL中存在?時,重定向不起作用,我無法弄清楚原因。在上面給出的URL中,如果我刪除?它可以正常工作,但如果?在那裏,則不會發生任何事情。是否有一個原因?

同樣的事情時,我嘗試從/site/?option=com_content&view=article&id=307&catid=89&Itemid=55

捕捉307我用這個正則表達式,article&id=([0-9]+) /?p=$1 [R=301,L]但同樣,當出現在URL中?停止做任何事情的發生重定向。

這是什麼原因?

.htaccess文件中的問題是,在查詢字符串必須分別在RewriteCond如果你需要對其進行操作處理的WordPress的博客(3.4.1)

回答

0

,而不應在RewriteRule而是內部匹配,只是匹配請求包括查詢字符串,並使用QSA到查詢字符串追加到重定向:

RewriteRule ^view-by-tag/([A-Za-z-]+)/?$ /tags/$1/ [R=301,L,QSA] 
# OR, if you don't want the rest of the query string appended, put a `?` onto 
# the redirect to replace it with nothing 
RewriteRule ^view-by-tag/([A-Za-z-]+)/?$ /tags/$1/? [R=301,L] 

實際上,QSA可以不需要在R重定向 - 我認爲默認行爲是通過重定向傳遞查詢字符串。

如果您需要從查詢字符串捕捉307,做一個RewriteCond和捕獲在%1

# Capture the id in %1 
RewriteCond %{QUERY_STRING} id=([\d]+) 
# Redirect everything to /, pass %1 into p 
RewriteRule . /?p=%1 [LR=301,L] 
+0

同上我對TerryE的評論:感謝這個信息。幾天後離開了。我會試試這個。知道這一點很有幫助。我非常享受更多關於正則表達式的知識......我推遲了很久。 – inspirednz 2012-07-18 22:33:32

+0

@inspiredlife學習正則表達式是實現啓蒙的一個基本步驟,或者像開始通過矩陣看到的一樣。 – 2012-07-18 23:05:05

+0

:-)。是的,通過矩陣看,或許更重要的是,能夠隨意操縱和改變!強大的東西。 – inspirednz 2012-07-19 22:54:14

0

,你已經錯過了的一點是,重寫引擎拆分URI分爲兩個部分:REQUEST_URIQUERY_STRING。查詢字符串部分未在規則匹配字符串中使用,因此在構造要查找的正則表達式模式時沒有意義。

可以使用重寫條件和條件正則表達式來設置%N變量,從查詢字符串中探測和挑選參數。在這種情況下它被忽略,除非使用的[QSA](查詢字符串附加)參數 -

在默認情況下,除非你已裝有?someparam查詢字符串被附加到輸出替換字符串。

,你會拿起ID在/site/?option=com_content&view=article&id=307&catid=89&Itemid=55的方法是使用類似:

RewriteCond %{QUERY_STRING} \bid=(\d+) 

規則之前,這將設置%1至307閱讀rewrite documentation爲更廣泛的討論如何做這個。

+0

感謝這個信息。幾天後離開了。我會試試這個。知道這一點很有幫助。我非常享受更多關於正則表達式的知識......我推遲了很久。 – inspirednz 2012-07-18 22:33:09

相關問題