2015-04-27 205 views
1

我想重寫使用.htaccess文件的URL,但它不工作。首先我想在我的本地,然後我活的服務器上了很多,但它不工作。我仍然得到原始地址。那就是我..URL重寫規則不工作.htaccess

原始地址: -

http://test.1click.com.pk/specific_hall.php?hall_name=Shalimar+Hall&hall_id=1

我想: -

http://test.1click.com.pk/Shalimar+Hall.php

我的.htaccess文件: -

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^([^/]*)\.php$ /specific_hall.php?hall_name=$1&hall_id=1 [L] 
    </IfModule> 

我仍然得到原始URL ..可有人請指出,爲什麼重寫規則不工作?我嘗試了很多沒有成功。提前致謝。

+0

你總是希望夏利馬爾-Hall.php或取決於hall_name價值? –

+0

感謝回覆@Sunil Pachlangia。我想要取決於hall_name值。 –

+0

當您使用http://test.1click.com.pk/Shalimar+Hall.php網址時會發生什麼? –

回答

1

您需要包含hall_id param以新的url格式重寫。否則,mod_rewrite無法知道它。

你可以把這段代碼在你的根htaccess的

RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} \s/specific_hall\.php\?hall_name=([^\s&]+)&hall_id=(\d+)\s [NC] 
RewriteRule^%2-%1.php? [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(\d+)-([^/]+)\.php$ specific_hall.php?hall_name=$2&hall_id=$1 [L] 

例子:

  1. http://example.com/specific_hall.php?hall_name=Shalimar+Hall&hall_id=1 會重定向到http://example.com/1-Shalimar+Hall.php(無需 改變你的文件的鏈接)。
  2. http://example.com/1-Shalimar+Hall.php將在內部重寫(= 顯示相同的內容) http://example.com/specific_hall.php?hall_name=Shalimar+Hall&hall_id=1
+1

謝謝@Justin Lurman。它像魅力一樣工作。你可以請更新這個.htaccess文件以刪除字符串之間的+號。例如(Shalimar + Hall)..我想要Shalimar Hall或Shalimar-Hall。提前致謝。 –

+0

不客氣。是的,這是可能的。但是,你能告訴我,「hall_name」是否可以包含任何短劃線「-'?因爲如果「Shalimar + Hall」變成「Shalimar-Hall」而你在其他人身上出現「本地」破折號將會成爲問題。例如:如果'hall_name'是'Something-special',它會變成'Something + special'(這是不正確的)。實際上,您必須確保您選擇的角色最初不是其他所有'hall_name'可能的值 –

+0

是的。@justin Lurman'hall_name'可以包含短劃線'-' ...感謝您的回覆和時間...... –