可能重复:
.htaccess 重写 URL 未正确显示?
我试图用 htaccess 在我的 url 中隐藏动态 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]
Run Code Online (Sandbox Code Playgroud)
现在发生的事情是当我写的时候让我们说:
www.something.com/home
或者
www.something.com/home/
我重定向到http://www.something.com/index.php?p=home但我想要发生的还有被视为 www.something.com/home 的 url,而不是显示到的完整路径用户,有人可以告诉我我做错了什么吗?
提前致谢 :))
如果您在重写规则中编写完整 url - apache 将执行重定向(因为不可能透明地将请求重写到不同的服务器 - 即使完整 url 对应于当前服务器)。
对于问题中的示例,您可以简单地从重写规则中删除域名:
RewriteRule ^home/?$ /index.php?p=home [QSA,NC,L]
Run Code Online (Sandbox Code Playgroud)
这将匹配网址/home或/home/将它们重写为/index.php?p=home
一个更灵活的想法是重写所有网址,例如:
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)
它将重写当前 url 的任何内容作为获取参数“p”。
一个完整的示例,它不会重写对真实文件(/css/foo.css 或任何其他资产)的请求:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)
qsa两个示例中都使用的标志将任何现有的 get 参数与p正在重写的新get arg合并。所以例如
/foo?bar=zum
Run Code Online (Sandbox Code Playgroud)
变成
/index.php?p=/foo&bar=zum
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7853 次 |
| 最近记录: |