我目前有一个网站,我试图在SEO方面进行优化。如何在Apache中将查询参数重写为路径参数?
我已经得到了网站对URL如工作:
domain.com/?app=about
在我的应用程序,$_GET[app]
设置为 '约',如预期。
现在,我想让它像domain.com/about
这样的URL被当作是domain.com/?app=about
。
我该如何在Apache .htaccess文件中做到这一点?
我目前有一个网站,我试图在SEO方面进行优化。如何在Apache中将查询参数重写为路径参数?
我已经得到了网站对URL如工作:
domain.com/?app=about
在我的应用程序,$_GET[app]
设置为 '约',如预期。
现在,我想让它像domain.com/about
这样的URL被当作是domain.com/?app=about
。
我该如何在Apache .htaccess文件中做到这一点?
这些被称为RewriteRule
s,而他们是相当简单:
RewriteEngine on
RewriteRule ^about$ /index.php?app=about
至于使它更加通用的,这个怎么样:
RewriteEngine on
RewriteRule ^([A-Za-z]+)$ /index.php?app=$1
这将向任何类似/员工或/联系人重定向到index.php的任何请求?app = [staff | contact]
使用此在您的.htaccess
RewriteEngine on
RewriteBase /your-site # only if neccessary
RewriteRule ^([^/])$ index.php?app=$1 [R,L]
编辑
我加入了L位的含义此过程作为最后一个规则,其本身不改变URL的R标志..只是在内部重写。执行R = 301将浏览器转发到重写的页面,这对调试很有用。
创建一个通用的.htaccess越来越要求可与以下行来完成的路径:
RewriteRule ^((.+/)+)$ /index.php?path=$1 [L,B]
这会给您请求的路径正确转义,所以如果被请求的路径是/你好/世界你将在路径参数中获得hello%2Fworld。使用PHP函数urldecode()获取原始格式。
仅当URL以'/'结尾时才有效。
备注如果你在同一个文件中有其他重写,你应该把它放在最后,因为它基本上可以匹配任何东西。
有无论如何使这个更通用,即对所有的应用程序有一个通用的,而不是为每个应用程序写一个? – bear 2009-07-11 23:53:42
+1 - 然而这个例子可以工作,但如果你有一些重写的东西,你最好使用更通用的解决方案。那么`^ [^ /] $ index.php?app = $ 1`我在这个正则表达式中可能不正确,但总的想法是:P – alex 2009-07-11 23:54:07