我试图用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的网址,而不是向用户显示完整路径,有人请告诉我我做错了什么?
提前感谢:))
答案 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
标志将任何现有的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]