2009-07-11 36 views
2

我目前有一个网站,我试图在SEO方面进行优化。如何在Apache中将查询参数重写为路径参数?

我已经得到了网站对URL如工作:

domain.com/?app=about

在我的应用程序,$_GET[app]设置为 '约',如预期。

现在,我想让它像domain.com/about这样的URL被当作是domain.com/?app=about

我该如何在Apache .htaccess文件中做到这一点?

回答

8

这些被称为RewriteRule s,而他们是相当简单:

RewriteEngine on 
RewriteRule ^about$ /index.php?app=about 

Here's the documentation

至于使它更加通用的,这个怎么样:

RewriteEngine on 
RewriteRule ^([A-Za-z]+)$ /index.php?app=$1 

这将向任何类似/员工或/联系人重定向到index.php的任何请求?app = [staff | contact]

+0

有无论如何使这个更通用,即对所有的应用程序有一个通用的,而不是为每个应用程序写一个? – bear 2009-07-11 23:53:42

+0

+1 - 然而这个例子可以工作,但如果你有一些重写的​​东西,你最好使用更通用的解决方案。那么`^ [^ /] $ index.php?app = $ 1`我在这个正则表达式中可能不正确,但总的想法是:P – alex 2009-07-11 23:54:07

2

使用此在您的.htaccess

RewriteEngine on 
RewriteBase /your-site # only if neccessary 

RewriteRule ^([^/])$ index.php?app=$1 [R,L] 

编辑

我加入了L位的含义此过程作为最后一个规则,其本身不改变URL的R标志..只是在内部重写。执行R = 301将浏览器转发到重写的页面,这对调试很有用。

0

创建一个通用的.htaccess越来越要求可与以下行来完成的路径:

RewriteRule ^((.+/)+)$ /index.php?path=$1 [L,B] 

这会给您请求的路径正确转义,所以如果被请求的路径是/你好/世界你将在路径参数中获得hello%2Fworld。使用PHP函数urldecode()获取原始格式。

仅当URL以'/'结尾时才有效。

备注如果你在同一个文件中有其他重写,你应该把它放在最后,因为它基本上可以匹配任何东西。