如何在Apache中将查询参数重写为路径参数?

时间:2009-07-11 23:47:56

标签: php apache .htaccess url-rewriting

我目前有一个网站,我试图在SEO方面进行优化。

我的网站使用的网址如下:

  

domain.com/?app=about

在我的应用中,$_GET[app]按预期设置为“关于”。

现在,我希望将domain.com/about这样的网址视为domain.com/?app=about

如何在Apache .htaccess文件中执行此操作?

3 个答案:

答案 0 :(得分:8)

这些被称为RewriteRule,它们非常简单:

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

Here's the documentation

至于使它更通用,那怎么样:

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

这会对/ staff或/ contact重定向到index.php这样的任何请求?app = [staff | contact]

答案 1 :(得分:2)

在.htaccess

中使用此功能
RewriteEngine on
RewriteBase /your-site # only if neccessary

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

修改

我添加了L标志意味着将此处理为最后一条规则,并且R标志本身不会更改URL ..只是在内部重写。执行R = 301会将浏览器转发到重写的页面,这对调试非常有用。

答案 2 :(得分:0)

创建一个通用.htaccess获取所请求的路径可以通过以下行完成:

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

这将为您提供正确请求转义的路径,因此如果请求的路径为 / hello / world ,您将在path参数中获得 hello%2Fworld 。使用PHP函数urldecode()来获取原始格式。

仅当网址以'/'。

结尾时才有效

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