2016-12-26 40 views
0

其實我有這樣的問題:的.htaccess重寫規則到路徑沒有改變Smarty的URL(PHP)

的URL自帶內部頁面就像
http://example.co.in/page.php?id=2

我想要的其實是像
http://example.co.in/AboutUs

是否有可能僅使用的.htaccess?我的.htaccess代碼給出略低於但它提供了這樣的
http://example.co.in/page/2

Options -MultiViews 
RewriteEngine On 

RewriteCond %{THE_REQUEST} \s/page\.php\?id=([0-9]+)\s [NC] 
RewriteRule^/page/%1? [R=301,L] 

RewriteRule ^page/([0-9]+)$ /page.php?id=$1 [L] 

輸出我嘗試了很多,但通過沒有得到成功了!

+0

不要使用規則的每一頁,只需重寫所有非文件請求到'index.php',然後查找該URL的路徑部分以簡單的陣列,包括通過ID頁面。這就是所謂的路由。 – Walf

+0

嗨@Walf!其實我不能使用它的路由,我必須做到這一點只爲兩個頁面,所以只能通過.htaccess操縱/重寫網址? – Roshan

+0

你不能添加5行PHP?甚至沒有新文件? – Walf

回答

0

您將需要每個頁面的規則。這是一個基於你的榜樣,讓你開始:

/公司簡介

Options -MultiViews 
RewriteEngine On 

RewriteRule ^AboutUs$ page.php?id=2 [QSA] 

這將保留,可以使用任意的查詢字符串,添加id=2。這是一個內部重寫,所以訪問AboutUs實際上會服務page.php?id=2這聽起來像你想要的。爲每個頁面添加一個RewriteRule。這是要按照要求進入.htaccess文件。

/page.php?id=2

如果你也想從工作停止page.php?id=2,並將其重定向到AboutUs,要將這組兩個指令的每一頁。

RewriteCond %{QUERY_STRING} (^|&)id=2(&|$) [NC] 
RewriteRule ^page\.php$ AboutUs? [R=301,L] 

這將提供了額外的查詢字符串參數重定向,但整個查詢字符串被丟棄,而不會傳遞(在?AboutUs後)。

注意

顯然改變你創建(ID號和公司簡介部分)規則每一頁的相關部分,而保留其餘的部分,正是因爲他們是爲每一個。

+0

嗨@ user2493235 --i嘗試了你的第一個一半的代碼,但仍然得到像'http://example.co.in/page.php?id = 2'的網址。 – Roshan

+0

上半年只會使'/ AboutUs'工作。你需要後半部分從'/page.php?id=2'重定向到'/ AboutUs'。 – SuperDuperApps

0

Hiii,all!感謝大家的支持和建議。
下面是對我而言,我確切想要的代碼。希望它可以幫助任何需要的人。

# Tell PHP that the mod_rewrite module is ENABLED. 
SetEnv HTTP_MOD_REWRITE On 
RewriteEngine on 
RewriteBase/

#FOR INTERNAL PAGES(rewrite "/page.php?name=about us" to "AboutUs") 

RewriteCond %{QUERY_STRING} ^name=([^&\s]+)$ 
RewriteRule ^(?:page\.php|)$ /%1? [R=301,L] 

RewriteCond %{QUERY_STRING} ^name=([^&\s]+)&name=([^&\s]+)$ 
RewriteRule ^(?:page\.php|)$ /%1/%2? [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^\s\/]+)/?$ page.php?name=$1&r [L,QSA]