【问题标题】:How to hide the URL change when using apache rewrite?使用apache重写时如何隐藏URL更改?
【发布时间】:2013-09-06 15:54:31
【问题描述】:

使用 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。

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

【问题讨论】:

标签: apache .htaccess redirect mod-rewrite url-rewriting


【解决方案1】:

第一条规则会将你丑陋的 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 文件一起位于您的域文件夹的根目录中。

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

【讨论】:

  • @anubhava 谢谢,我正在考虑,但这仅适用于他确实希望将任何查询字符串携带到新的 URL 格式。
  • 是的,但你永远不知道这些重写要求。但是是的,OP 没有提到任何此类要求。
  • @prix 感谢您如此迅速的回复!正如我所害怕的......当使用:RewriteBase / 时,当我尝试运行apachectl restart 时,它会导致网络服务器崩溃。 RewriteRule ^Page/(.*)/?$ /page.cfm?pagevar=$1 [QSA,NC,L] 是否需要工作?编辑:网络服务器在运行apachectl restart 时抛出RewriteBase: only valid in per-directory config files
  • @cEMA 就像我提到的那样,您不需要将其放在虚拟主机上,而是将其放在该域根文件夹上的 .htaccess 上。
  • @Prix 有没有办法做到这一点而不是使用 .htaccess
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2012-12-21
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    相关资源
    最近更新 更多