我想了解使用.htaccessredirect和重写URL之间的区别。 所以这里是一个例子:假设我有一个像www.abc.com/ index.PHP?page=product_types&cat=88 (称之为“原始”url)
但是,当用户键入abc.com/shoes (我们称之为“所需的”url)时,他们需要查看上面链接的内容。 要做到这一点,我会这样做:
Options +FollowSymLinks RewriteEngine on RewriteBase / RewriteRule ^(.*)shoes(.*)$ index.PHP?page=product_types&cat=88
这段代码没有错,它的窍门。 但是,如果我在地址栏中input原始url,内容会出现,但url不会更改。 所以它仍然是www.abc.com/index.PHP?page=product_types&cat=88
但是,如果我想在地址栏中显示所需的url( /shoes ),如果我在www.abc.com/ index.PHP?page=product_types&cat=88怎么办? 这将如何使用.htaccess完成? 我是否遇到潜在的循环?
.htaccess将包含子导向器的非www域redirect到www并排除子域
htaccess在localhost中工作,但在EC2实例中不起作用
使用Mod_Rewrite将ROOT重写为另一个path
Apache的mod_rewrite不能使用.htaccess文件
使用htaccess从URL中删除字符
标题添加Content-disposition“附件”会导致内部服务器错误
Apache重写URL,但不要重写某个文件夹
使用htaccess进行维护页面转发对于代理资料不起作用
如何使用.htaccess重新编写URL
htaccess,将所有请求redirect到https://
一些解释可以在这里找到: https : //stackoverflow.com/a/11711948/851273
要点是重写只发生在服务器上,客户端(浏览器)对此不了解。 浏览器发送一个请求并获取内容,对于服务器上发生的事情并不明智。
重定向是服务器对请求的响应 ,告诉客户端(浏览器)提交新的请求。 浏览器请求一个URL,这个URL是位置栏中的内容,服务器得到这个请求并且用一个重定向响应 ,浏览器得到响应,并在服务器的响应中加载URL。 地址栏中的网址现在是新的网址,浏览器会发送新网址的请求。
在服务器上内部简单地重写对网页中的内容完全没有任何影响。 如果谷歌或reddit或任何网站有链接www.abc.com/index.PHP?page=product_types&cat=88 ,您的内部服务器重写规则绝对没有这一点,也没有任何人谁点击该链接,或任何客户端恰好因为任何原因请求该URL。 所有的重写规则都会在内部将包含shoes更改为服务器中的/index.PHP?page=product_types&cat=88 。
如果你想这样做,所有的查询字符串index.PHP页面的请求,你可以告诉客户端(浏览器) 重定向到更好看的URL。 你需要小心,因为重写规则循环,你的重定向将被内部重写,这将导致一个内部重写等重定向。造成一个循环,并将引发500服务器错误。 所以你可以特别匹配请求本身:
RewriteCond %{THE_REQUEST} ^[AZ]{3,9} /index.PHP?page=product_types&cat=88 RewriteRule ^/?index.PHP$ /shoes [L,R=301]
这应该只用于使它在野外的链接指向正确的地方。 您必须确保您的内容正在生成正确的链接 。 这意味着您网站上的所有内容都使用/shoes链接,而不是/index.PHP?page=product_types&cat=88链接。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。