2012-11-01 174 views
2

我已經成功創建了我的mod_rewrite規則來更改站點頂級的所有動態URL,但現在我需要爲第二級創建一個規則,並且我認爲稍後可能需要一條規則二,二級重寫。多個mod_rewrite規則

目前,我有這個

RewriteEngine on 
    RewriteCond %{SCRIPT_FILENAME} !-d 
    RewriteCond %{SCRIPT_FILENAME} !-f 
    RewriteRule ^(.+)$ index.php?subj=$1 

,這有助於/index.php?subj=home更改到/ home作爲IUT確實爲所有其他網頁,如/聯繫人/約/事件等上。

但是現在我已經在事件下創建了子頁面,因此需要將/events.php?event=event-name更改爲/ event-name。但是當我添加另一個規則時,它會弄亂整個網站。我試圖做的是這樣的

RewriteEngine on 
    RewriteCond %{SCRIPT_FILENAME} !-d 
    RewriteCond %{SCRIPT_FILENAME} !-f 
    RewriteRule ^(.+)$ index.php?subj=$1 
    RewriteRule ^(.+)$ event.php?event=$1 

但那沒有奏效。

但在所有我想重定向的index.php和/(根)爲/ home的頂部

任何人都可以請告訴我正確的規則,我已經搜索周圍,但我似乎無法做對了。

很多感謝:)

乾杯

UPDATE: 感謝您的幫助迄今爲止,我已經嘗試了一切,但似乎無法得到它的權利。正如Ben所建議的那樣,我會提供更多有關URL的信息。 現在整個網站都坐在一個子目錄中,目前它仍在開發中,所以現在它在mydomain.com/newwebsite/event.phpevent=2 但是.htaccess文件目前在根文件夾中開發網站所以它在/ newwebsite目錄中。 所以我試圖寫的網址是mydomain.com/newwebsite/event/2

你注意到它說'2',那只是頁面/事件ID。更進一步,它不會是id,而是它的標題。

+0

+1我開始時遇到了各種各樣的.htaccess文件問題,它們可能會讓人很困惑。將看看我是否可以回答您的查詢:-) –

+0

@Ben Carey。是的,請告訴我,它可能會讓人困惑,謝謝:) – robolist

+0

我正在嘗試所有這些建議,但他們都沒有工作。 – robolist

回答

2

您正在測試兩次相同的條件,您需要區分正則表達式以測試獨特的功能。

我會重寫與此類似文件:

# Turn on the rewrite engine 
RewriteEngine On 

# Ignore existing files and directories 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

# Set the general first level rewrites 
RewriteRule ^home/?$ index.php?subj=home [NC] 
RewriteRule ^event/(.+)$ event.php?event=$1 [NC] 

或者你也可以分層次解決它像下面這樣。這將使用第一場比賽:

# Turn on the rewrite engine 
RewriteEngine On 

# Ignore existing files and directories 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

# Set all the rewrites 
RewriteRule ^event/(.+)$ event.php?event=$1 [L] 
RewriteRule ^(.+)$ index.php?subj=$1 [L] 
+0

嘿本,再次感謝隊友,但由於某種原因,它似乎並沒有工作。我試過了所有的東西,我真的不知道什麼是錯的。 – robolist

+0

@robolist查看我對你的問題的最新評論:-) –

+0

乾杯隊友,謝謝你的幫助。我現在更新了我的問題:) – robolist

0

執行此操作的簡單方法是鏈接到/ event/eventName而不是/ eventName。通過這種方式,您可以將邏輯放入.htaccess中:[L]此處指示處理應在達到匹配後停止。

另一種方式是將所有請求發送到index.php?subj =並在index.php中有邏輯來決定是否需要將它作爲事件處理(即是否存在具有這樣一個名稱的事件)。

+0

嗨@Clarence,非常感謝你幫助,但由於某種原因,它似乎沒有工作。它用這些規則弄亂整個網站。但是你的建議是將所有內容放在index.php中聽起來像是最簡單的路線,儘管不是我真正想要的。我會盡力而爲,但更願意通過htacess來處理它。 :)歡呼聲 – robolist

0

它看起來對我來說,你的第二個樣本有兩個重寫規則試圖做趕上同樣的事情(^(+)$)和請求發送到兩個不同的地方:

RewriteRule **^(.+)$** index.php?subj=$1 
    RewriteRule **^(.+)$** event.php?event=$1 

你需要事端來區分它們,以便任何規則火災:

RewriteRule **^home/(.+)$** index.php?subj=$1 
    RewriteRule **^events/(.+)$** event.php?event=$1 

,或者您需要將請求發送到一個單一的文件/頁/處理器 - 一個front controller可以處理邏輯,爲您和提供正確的內容。

+0

您好AMD,非常感謝您的幫助,儘管出於某種原因,但它並不完成這項工作。索引規則正在工作,但第二條規則仍然不起作用。 – robolist