8

使用 apache 重写时如何隐藏 URL 更改?我已经在这个问题上搜索了几个小时,并决定来这里找出答案。所以任何帮助/线索将不胜感激!

现在我正在使用:

RewriteRule ^/Page/(.*)$ http://domain.com/page.cfm?pagevar=$1 [NC,L]

问题是,当您导航到http://domain.com/Page/abc123 它时,它会起作用。但是,它将浏览器网址更改为http://domain.com/page.cfm?pagevar=abc123

我希望它执行相同的操作,但将http://domain.com/Page/abc123显示为 url。

请,对此的任何见解将不胜感激!再次感谢。

4

2 回答 2

7

第一条规则会将你丑陋的 URL 重定向到漂亮的 URL 格式。

第二条规则将在内部将其重定向回来,因为用户不会看到丑陋的 URL。

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

# Redirect /page.cfm?pagevar=abc123 to /Page/abc123
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+page\.cfm\?pagevar=([^&\s]+) [NC]
RewriteRule ^ /Page/%1? [R=301,L]

# Internally forward /Page/abc123 to /page.cfm?pagevar=abc123
RewriteRule ^Page/(.*)/?$ /page.cfm?pagevar=$1 [QSA,NC,L]

上述规则将用于.htaccess文件,并假定page.cfm与文件一起位于域文件夹的根目录中.htaccess

就像你的例子所建议的那样。

于 2013-09-06T16:28:56.987 回答
0

您需要摆脱http://domain.com规则目标的一部分。当你拥有它时,它会隐式重定向浏览器而不是内部重写:

RewriteRule ^/Page/(.*)$ /page.cfm?pagevar=$1 [NC,L]
于 2013-09-06T16:26:43.193 回答