2016-12-26 41 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]