2013-11-09 62 views
0

我試着用這裏發佈的示例嘗試過,但我沒有設法讓我的htaccess正常運行。.htaccess url用兩個變量重寫

這裏的情況: 我有看起來像這樣的鏈接

domain.com/sport/football/index.php?lang_id=1&page_id=500(主頁) domain.com/sport/football/index.php?lang_id=1&page_id=505(玩家) domain.com/sport/football/index.php?lang_id=1&page_id=510(教練)...

我想重新命名他們

domain.com/sport/football/

domain.com/sport/football/players/

domain.com/sport/football/coaches/

等等 併爲所有非指定PAGE_ID的重定向到主頁。

所有幫助非常感謝。

回答

0

在你的文檔根htaccess文件,添加:

RewriteEngine On 
RewriteRule ^sport/football/$ /sport/football/index.php?lang_id=1&page_id=500 [L,QSA] 
RewriteRule ^sport/football/players/?$ /sport/football/index.php?lang_id=1&page_id=505 [L,QSA] 
RewriteRule ^sport/football/coaches/?$ /sport/football/index.php?lang_id=1&page_id=510 [L,QSA] 

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /sport/football/index\.php 
RewriteCond %{QUERY_STRING} ^(.*)page_id=500($|&) 
RewriteRule^/sport/football/? [L,R=301] 

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /sport/football/index\.php 
RewriteCond %{QUERY_STRING} ^(.*)page_id=505($|&) 
RewriteRule^/sport/football/players/? [L,R=301] 

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /sport/football/index\.php 
RewriteCond %{QUERY_STRING} ^(.*)page_id=510($|&) 
RewriteRule^/sport/football/coaches/? [L,R=301] 
+0

謝謝喬恩,它是做一些改寫,但不是我想要的。 當我輸入除家庭以外的頁面的新網址時,出現404錯誤,並且我重定向到/ sport/football /當我嘗試到達家中時。 請注意,目錄中的默認頁面是index.html,而不是index.php。對不起,我忘了提及 – Aleks

0

您可以使用RewriteMap Directive了點。你必須從名稱定義映射到IDS

players 505 
coaches 510 

,並告訴Apache關於地圖

RewriteMap football txt:/path/to/footballmap.txt 

RewriteMap必須處於主配置文件或VirtualHost指令內。現在

你可以使用這個地圖

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^sport/football/(.*)/?$ /sport/football/index.php?lang_id=1&page_id=${footballmap:$1|500} [L] 

如果沒有找到,默認500(主頁)鍵將被使用。如果你有很多映射,你也可以使用散列文件。

更新:

當你沒有訪問服務器或虛擬主機的配置文件,你只能有一個固定的RewriteRule「地圖」

RewriteRule ^sport/football/players/?$ /sport/football/index.php?lang_id=1&page_id=505 [L] 
RewriteRule ^sport/football/coaches/?$ /sport/football/index.php?lang_id=1&page_id=510 [L] 
# maybe other similar rules ... 
# this is a catch everything else and must come last 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^sport/football/ /sport/football/index.php?lang_id=1&page_id=500 [L] 
+0

添加RewriteMap只會給我500錯誤。我嘗試了完整路徑,甚至只是文件名,因爲我已經把它放在同一個文件夾中。 – Aleks

+0

你說得對,我只是重讀了[docs](http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap),並且RewriteMap只允許在服務器配置或虛擬主機指令中使用。我還修復了第二個錯誤,即缺少「RewriteCond」。請參閱最新的答案。 –

+0

不幸的是,我沒有訪問服務器配置或虛擬主機配置文件。 – Aleks