2013-08-02 65 views
1

這是我測試的.htaccess的.htaccess - 重寫規則忽略或不工作

RewriteEngine On 
    Options +FollowSymLinks  

    #WWW redirect WORKS 
    RewriteCond %{HTTP_HOST} !^$ 
    RewriteCond %{HTTP_HOST} !^www\. [NC] 
    RewriteCond %{HTTPS}s ^on(s)| 
    RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

    RewriteRule ^home/$ index.php [L] #THIS RULE WORKS 
    RewriteRule ^news/(.+)/$ /news.php?page=$1 [L] #not works 
    RewriteRule ^news/(.+)/$ /news.php?article=$1 [L] #not works 
    RewriteRule ^news/$ news.php [L] #WORKS 

我想使這個:

"news.php" => "news/"  
"news.php?page=3" => "news/3/" 
"news.php?article=lorem-ipsum-3" => "news/lorem-ipsum-3/" 

有了這個URL規則,這樣的網址效果很好,但不是我想要的:

http://www.xxxxxx.com/news/?page=3 #works 
http://www.xxxxxx.com/news/?article=lorem-ipsum-2 #works 

我該如何修復.htaccess?

感謝

回答

1

我看到的唯一問題是,你必須匹配相同的條件下(L標誌從檢查的詳細規則,停止吧)兩個規則,你在改寫路徑的前面有一個額外的/

RewriteRule ^news/(.+)/$ news.php?page=$1 [L] 
RewriteRule ^news/(.+)/$ news.php?article=$1 [L] # Will never execute 

除此之外,它們看起來很好。 (我跑他們通過htaccess tester,他們終止在正確的規則。

如果沒有提供明確的規範鏈接,你不使用的.htaccess末手動添加/如果它缺少,你可能要考慮做最後/可選帶?

RewriteRule ^news/(.+)/?$ news.php?page=$1 [L] 

更新 假設這是一個頁面,如果它是一個數字而已,而一個文章,如果是別的然後:

+0

我該如何做我想要的? 'code'「news.php」=>「news /」 「news.php?page = 3」=>「news/3 /」 「news.php?article = lorem-ipsum -3「=>」news/lorem-ipsum-3 /「'code' – benzo

+0

將news.php與article.php分開,並分別與它們的查詢字符串一起工作,有沒有解決我的問題? – benzo

+0

已更新的答案。 – miah