Ray*_*Ray 24 apache .htaccess mod-rewrite
我想了解使用.htaccess重定向和重写URL之间的区别.所以这是一个例子:说我有一个像这样的链接www.abc.com/ index.php?page=product_types&cat=88
(称之为"原始"网址)
但是当用户键入abc.com/shoes
(让我们称之为"所需的"URL)时,他们需要查看上述链接的内容.要做到这一点,我会这样做:
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)shoes(.*)$ index.php?page=product_types&cat=88
Run Code Online (Sandbox Code Playgroud)
这段代码没有错,它可以解决问题.但是,如果我在地址栏中输入原始网址,则会显示内容,但网址不会更改.所以它仍然是www.abc.com/index.php?page=product_types&cat=88
但是,如果我输入所需的url(/shoes
)以显示在地址栏中,该www.abc.com/ index.php?page=product_types&cat=88
怎么办?如何使用.htaccess实现这一目标?我是否遇到了潜在的循环?
Jon*_*Lin 30
有些解释可以在这里找到:https://stackoverflow.com/a/11711948/851273
要点是重写只发生在服务器上,客户端(浏览器)对它视而不见.浏览器发送请求并获取内容,为了提供请求,服务器上发生的事情并不明智.
重定向是服务器对请求的响应,它告诉客户端(浏览器)提交新请求.浏览器要求输入网址,此网址是位置栏中的内容,服务器获取该请求并使用重定向进行响应,浏览器获取响应并在服务器的响应中加载URL.位置栏中的URL现在是新URL,浏览器会发送新URL请求.
简单地在服务器上进行内部重写对于野外的URL完全没有任何意义.如果google或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} ^[A-Z]{3,9}\ /index\.php\?page=product_types&cat=88
RewriteRule ^/?index.php$ /shoes [L,R=301]
Run Code Online (Sandbox Code Playgroud)
这应该仅用于制作它,以便野外链接指向正确的位置.您必须确保您的内容生成正确的链接.这意味着您网站上的所有内容都使用/shoes
链接而不是/index.php?page=product_types&cat=88
链接.
归档时间: |
|
查看次数: |
20858 次 |
最近记录: |