.htaccess重定向beatify URL/隐藏结构
我的目标是获取该格式的URL.htaccess重定向beatify URL/隐藏结构,.htaccess,mod-rewrite,redirect,apache2,.htaccess,Mod Rewrite,Redirect,Apache2,我的目标是获取该格式的URL www.mydomain.com(/dir1)?(/dir2)?/(index.php|login.php)((:?\?code=)[a-Z0-9]+)? 强制将浏览器url更改为: www.mydomain.com/(home|welcomepage)/code/%1/ 一个非常简单的例子是: www.mydomain.com/dir1/dir2/index.php?code=khkdh239 更改: www.mydomain.com/home/code
www.mydomain.com(/dir1)?(/dir2)?/(index.php|login.php)((:?\?code=)[a-Z0-9]+)?
强制将浏览器url更改为:
www.mydomain.com/(home|welcomepage)/code/%1/
一个非常简单的例子是:
www.mydomain.com/dir1/dir2/index.php?code=khkdh239
更改:
www.mydomain.com/home/code/khkdh239/
并将内部重定向到
www.mydomain.com/dir1/dir2/index.php?code=khkdh239
这是我的许多尝试之一
#RewriteCond %{QUERY_STRING} !^$ # I was experimenting with simple urls, no ?code=....
#RewriteRule .? - [S=2]
RewriteRule ^(?:dir1/)?(?:dir2/)?(?:login.php)$ /welcomepage/? [R=301,NC]
RewriteRule ^.*welcomepage.*$ code/login.php? [QSA,L]
根据我的尝试结果得出的观察结果:
RewriteRule ^welcomepage/$ code/login.php? [QSA,L]
RewriteRule ^(?:dir1/)?(?:dir2/)?(?:login.php)$ /welcomepage/? [R=301,NC,L]
RewriteRule ^.*welcomepage.*$ code/login.php? [QSA,L]
没有重定向,所以我使用了^.*welcomepage.$
RewriteRule ^welcomepage/$ code/login.php? [QSA,L]
RewriteRule ^(?:dir1/)?(?:dir2/)?(?:login.php)$ /welcomepage/? [R=301,NC,L]
RewriteRule ^.*welcomepage.*$ code/login.php? [QSA,L]
重定向到www.domain.com/welcomepage/
,但内部重定向失败RewriteRule ^(?:dir1/)?(?:dir2/)?(?:login.php)$ /welcomepage/? [R=301,NC]
RewriteRule ^.*welcomepage.*$ code/login.php? [QSA,L]
重定向到第二个链接,但不重定向到第一个链接POST
operation)提前感谢大家。要将URL重定向到漂亮的URL,请选中
%{THE_REQUEST}
变量:
RewriteCond %{THE_REQUEST} GET\ (?:/dir1)?(?:/dir2)?/index\.php\?code=([^&]+) [NC]
RewriteRule ^index\.php$ /home/code/%1/ [R=301,L]
接下来,您希望友好URL在内部寻址其他脚本:
RewriteRule ^home/code/([^/]+)/?$ /dir1/dir2/index.php?code=$1 [NC,L]
最终未经提炼的解决方案是,和我的结合 我将提供
.httaccess
代码,以防任何人面临类似问题
重要提示:可以找到所有重定向标志([NC、R、p、L]等)
为什么大多数重定向都不起作用
因为我的.htacces文件位于/{ROOT\u DIRECTORY\u OF_SITE}/dir1/
而不是/{ROOT\u DIRECTORY\u OF_SITE}/
如何实现GET URL的隐藏重定向
为了实现这一点,我遵循了建议,并检查了所有GET
请求中请求是否遵循了特定的正则表达式。在这些情况下,真实地址被转发到了一个伪造的地址。我使用了R=301
,这是永久重定向,只有在我确信它是正确的情况下才使用。调试时使用R=302
和私人浏览
# Redirect dir1/dir2/login.php?code=password to fake address mydomain.com/signup/?code=password
RewriteCond %{THE_REQUEST} GET\ /?(?:dir1/)?(?:dir2/)?login\.php\?code=([^&]+) [NC]
RewriteRule ^.*$ /signup/%1/ [R=301,L]
#Redirect fake address mydomain.com/signup/?code=pasword internaly to real address
RewriteRule ^signup/([^/]+)/$ /dir1/dir2/login.php?code=$1 [NC,L]
如何在不丢失文件上载等功能的情况下实现POST URL的隐藏重定向。
在这里,我必须有点创造性。在文件上传表单中,我将重定向改为指向一个伪造的、美化的url
例如,要将post请求发送到mydomain.com/signup/send mail/#login
我使用了:
<form role="form" method="POST" action="/signup/send-mail/#login" id="login">
[p]
标志相当于[L]
,但它也允许POST数据重定向,因为它可以作为代理。[L]
标志只是告诉系统不要在.htaccess
文件中向下继续,因为这将是最后一次重定向(简单地说,有关详细信息,请参阅)
.htaccess
非常感谢所有回复我的帖子并帮助我获得此版本的人。.htaccess
code是.htaccess所在目录的子目录。is.htaccess位于文档根目录下
?它位于dir1下。应该把它放在上面的目录中吗?我想我通过将.htaccess
移动到根目录来修复它。非常感谢。我会确保明天一切正常。是的,确实按照您的规则,它应该放在文档根目录下,通常可以正常工作,但是当我上传文件时,因为这是一个post操作,无法获取重定向,因此重定向不起作用,并显示原始URL。有没有一种方法可以隐藏IP,而不丢失功能?