htaccess短网址

时间:2013-01-04 00:12:34

标签: mod-rewrite

  

可能重复:
  .htaccess rewrite URL not showing correctly?

我试图用htaccess在我的网址中隐藏动态php,现在我是htaccess的初学者,从我到目前为止学到的东西我设法做到了:

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^home/$ http://www.something.com/index.php?p=home [NC,L]
RewriteRule ^home$ http://www.something.com/index.php?p=home [NC,L]

现在发生的事情是我写的时候说:

www.something.com/home

OR

www.something.com/home /

我被重定向到http://www.something.com/index.php?p=home但是我想要发生的是被视为www.something.com/home的网址,而不是向用户显示完整路径,有人请告诉我我做错了什么?

提前感谢:))

2 个答案:

答案 0 :(得分:4)

如果你在重写规则中写一个完整的URL - apache将执行重定向(因为它不可能透明地重写对不同服务器的请求 - 即使完整的url对应于当前服务器)。

最简单的解决方案

对于问题中的示例,您只需从重写规则中删除域名:

RewriteRule ^home/?$ /index.php?p=home [QSA,NC,L]

这会匹配网址/home/home/并将其重写为/index.php?p=home

处理任何网址

更灵活的想法是重写所有网址,例如:

RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]

将重写当前url作为get参数“p”。

一个完整的示例,它不会重写对真实文件(/css/foo.css或任何其他资产)的请求:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]

QSA标志的目的

两个示例中使用的qsa标志将任何现有的get参数与正在重写的新p get arg合并。例如,

 /foo?bar=zum

变为

/index.php?p=/foo&bar=zum

答案 1 :(得分:3)

这是因为你输入了完整的网址。试试这个:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^home/$ index.php?p=home [NC,L]
RewriteRule ^home$ index.php?p=home [NC,L]