.htaccess RewriteRule to path而不改变smarty中的URL(php)

时间:2016-12-26 10:43:17

标签: apache .htaccess mod-rewrite url-rewriting

其实我有这个问题:

内部网页的网址就像是 的 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]  

我尝试了很多但没有成功!

2 个答案:

答案 0 :(得分: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号和AboutUs部分)更改相关部分,但保留其他部分与每个部分完全相同。

答案 1 :(得分:0)

Hiii,全部!感谢大家的支持和建议 以下代码对我来说非常合适。希望它可以帮助任何人。   

# 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]