2013-02-20 49 views
1

我想要做的是一個非常簡單的想法,但不知何故它不工作。我需要這個重寫規則的工作:如何使這個重寫規則有效?

RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-=]*)$ index.php?op=$1&$2 [L,NC] 

我認爲這是相當多的自我解釋,但我希望規則第一正則表達式組通過爲op參數和第二正則表達式組被原樣傳送給腳本。就像這樣:

http://example.org/view/?post_slug=awesome-apache-mods - > http://example.org/index.php?op=view&post_slug=awesome-apache-mods

這裏的問題是,第一部分工作得很好,這意味着op參數設置正確,但是第二部分丟失。我的意思是文學迷失。當我發出print_r($_GET)時,只有op參數。

Array 
(
    [op] => view 
) 

我想知道這裏有什麼問題嗎?

+0

重寫規則^([A-ZA-Z 0-9 - ] +)/?([a-zA-Z0-9 - =] *)$ index.php?op = $ 1&post_slug = $ 2 [L,NC]你錯過了第二個變量,因爲它是空值變量發送不顯示在print_R – 2013-02-20 20:04:32

+0

我不能看到匹配post_slug的正則表達式中的任何(在分數_下)? – 2013-02-20 20:14:06

+0

@IesusSonesson第二個var並不總是'post_slug'。關鍵是它可以是任何東西。 – 2013-02-21 07:08:22

回答

1

我使用preg_match_all測試你的模式,因爲它是_沒有在模式定義的,但是當我加入_它相匹配的網址不匹配的網址:

$text = 'view/?post_slug=awesome-apache-mods'; 
$pattern = '/^([a-zA-Z0-9-]+)\/\?([a-zA-Z0-9_=-]*)$/'; 
preg_match_all($pattern, $text, $out); 
print_r($out); 

然後你的.htaccess模式應該是這樣的:

^([a-zA-Z0-9-]+)/\?([a-zA-Z0-9_=-]*)$ [L,NC, QSA] 

其更好地利用這一點,如果/觀點是常數:

RewriteRule ^([a-zA-Z0-9_-=]*)$ index.php?op=view&$2 [L,NC, QSA] 
+0

謝謝,我會在我回家時嘗試它,並讓它知道它是否有效。雖然我認爲問題不在於缺少下劃線,因爲我之前已經嘗試過。看起來它可能是一個非轉義的問號! – 2013-02-21 07:10:45