2016-02-09 41 views
0

我已經閱讀,研究和測試了比我想承認的更多的迭代。老實說,我很難過。這應該很簡單。 。 。RewriteRule刪除查詢字符串的顯示

本網站中的所有內部導航均通過對pages.php的調用,包含兩個查詢字符串,一個用於顯示頁面,另一個用於語言。

對於一個簡單的例子:。

<a href="pages.php?mode=contact&setlang=de">Contact us</a> 

我想瀏覽器中顯示所述第一參數(在這種情況下,「接觸」以.html所附因此,contact.html尼斯和清潔

我似乎無法弄清HTML中的鏈接的格式和RewriteRule的組合,它們將完成這項工作。我嘗試了很多很多的東西。這是阻止這個網站發佈的唯一的東西。幫助是最好的y讚賞。

回答

0

這應做到:

RewriteEngine On 
RewriteRule (\w+)\.html$ pages.php?mode=$1&setlang=de [L] 

這將捕獲的字母,數字的字符串和前的.html強調並重寫它pages.php模式=(字符串)& setlang = DE?

你沒有提到要如何處理語言,這樣的事情可能工作:

RewriteRule (\w+)-(\w+)\.html$ pages.php?mode=$2&setlang=$1 [L] 
+0

由於某種原因,這是行不通的。原始問題中的示例網址只是其中的一個,因爲這兩個參數的值很多。我真的很難過。這個讓我很頭疼。 –

1

我看到兩個選項取決於你希望顯示的URL如何「乾淨」:

1)修改你的href鏈接,使其指向友好的URL,並將lang值保留在原始查詢字符串參數中。例如:

<a href="contact.html?setlang=de">Contact us</a>

使用內部重寫替代模式和保護郎QS:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.+)\.html$ pages.php?mode=$1 [QSA,L] 

OR

2)修改您的href鏈接,使其指向友好具有在URI或文件名本身中設置的lang值的URL。例如:

<a href="de/contact.html">Contact us</a>

使用內部重寫來代替這兩個模式和郎鹹平:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.+)/(.+)\.html$ pages.php?mode=$2&lang=$1 [L] 

注:這是假設的重新寫入被添加到您的主要的.htaccess,你有

LoadModule rewrite_module modules/mod_rewrite.so 

一個:重寫你的主配置啓用模塊d沒有其他衝突重寫,別名,重定向...等。