2016-11-30 30 views
3

我一直想弄明白現在幾個小時,但總是我的一個重定向不起作用。我有路徑something.com/blog/article-namesomething.com/blogujeme作爲文章列表。但我無法讓這兩個重定向工作,因爲他們共享相同的第一個字符,正則表達式使我失敗。到目前爲止,我想出了是:如何處理RewriteRules當單詞有相似的第一個字符?

RewriteRule ^(?!blog\?)(blogujeme)$ blog/category-view.php 
RewriteRule ^(?!blogujeme\?)(blog) blog/page-view.php 

第一重寫規則的實際工作,但第二個不併重定向到something.com/blog,而不是something.com/blogujeme

我在做什麼錯?

+0

@WiktorStribiżew是的,但是很難解決我的問題,重定向仍然不起作用 –

回答

1

但我不能去上班這兩個重定向,因爲它們共享相同的 第一字符和正則表達式失敗我

你應該有一個正則表達式像這樣的任何問題,因爲你的兩個例子可以區分。其實,你的問題是關於mod_rewrite規則語法/語義。

以下是你需要在你的htaccess寫(這必須是在根文件夾在這種情況下)

RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f # prevent from infinite loop 
RewriteRule ^blog/.+$ blog/page-view.php [L] 

RewriteRule ^blogujeme$ blog/category-view.php [L] 
+1

對不起,錯誤地downvote,並沒有意識到,直到它被鎖定。 – Gerrit0

+1

這是最正確和徹底的答案,授予賞金 –

0

從臀部拍攝 - 一個字的邊界錨怎麼樣?

RewriteRule \bblogujeme$ blog/category-view.php 
RewriteRule \bblog\b.* blog/page-view.php 
+0

沒有工作,結果相同。這真的給了我很多痛苦。最簡單的做法可能是爲這兩個頁面使用完全不同的單詞,但也許有人會想出一些東西 –

+0

我不熟悉URL重寫,但在我看來,你的開始和結束錨點('^'和'$')是不正確的。嘗試修改後的正則表達式。 (做一些谷歌搜索我看起來像它取決於'RewriteBase' - 正確?也許有*應該*是一個起始錨('^')而不是斜槓'\ /'...) – ClasG

+0

在[本網站] (http://htaccess.mwl.be/)看來'RewriteRule \ bblogujeme $ blog/category-view.php'和'RewriteRule \ bblog \ b。* blog/page-view.php'可能會爲你做。更新了答案。 – ClasG

2

您可以使用正則表達式和幾個阿帕奇mod_rewrite指令來實現你想要的是什麼。你必須使用一個條件來檢查,如果該請求是一個文件,如果是,則處理文件,而不是繼續使用規則:

RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^blog/.*$ blog/page-view.php [L] 
RewriteRule ^blogujeme$ blog/category-view.php [L] 

那麼你就必須:

/blog -> blog/page-view.php 
/blogujeme -> blog/category-view.php 
/blog/page-view.php -> blog/page-view.php 
/blog/category-view.php -> blog/category-view.php 
0

對於「你做錯了什麼」最簡單的答案是不要使用[L]作爲mod_rewrite到STOP的指示符,並在匹配時得到滿足。

按照最具體的順序先排列順序排列「相似」正則表達式。如果該命中並且最終具有[L],則不會運行更多規則。

如果沒有命中,則會嘗試下一個命令。因此,他們可以被看作是 「if,else if,etc ..」

相關問題