重写网址以隐藏真实的网页路径

Seb*_*bas 6 .htaccess url-rewriting

我最近在SO的帮助下解决了我的htaccess rewriterule问题:

在重写规则中重用子域

结果是当有人进入时

whatever.example.com/anypage
Run Code Online (Sandbox Code Playgroud)

在地址栏中,htaccess会自动重定向到

whatever.example.com/somepath/whatever/anypage
Run Code Online (Sandbox Code Playgroud)

我想要做的是找到一种方法,只需whatever.example.com/anypage在地址栏中whatever.example.com/somepath/whatever/anypage显示所显示的内容.

在我之前提到的帖子中,Jon Lin清楚地提到了以下内容:

重定向始终会更改浏览器的URL地址栏中的内容

但是,我知道一些非常频繁的网址重写案例会在地址栏中显示,例如:

example.com/article-1-15
Run Code Online (Sandbox Code Playgroud)

但实际上显示的内容

example.com/somepath/somepage.php?article=1&otherparam=15
Run Code Online (Sandbox Code Playgroud)

这怎么可能适用于我的情况?我真的希望有一个小小的网址,但似乎我错过了一些东西.

Fel*_*a A 2

你可以尝试这样的事情:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI}  ^/([^/]+)$
RewriteRule .*  http://whatever.example.com/somepath/whatever/%1 [L]
Run Code Online (Sandbox Code Playgroud)

它将映射:

http://whatever.example.com/anypage

至资源:

http://whatever.example.com/somepath/whatever/anypage

始终显示在浏览器的地址栏中:

http://whatever.example.com/anypage

更新

如果任何内容都是动态的并且在替换 URI 中相同,则这里是另一个选项:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST}  ([^/]+)\.example\.com.*
RewriteCond %{REQUEST_URI}  ^/([^/]+)$
RewriteRule .*  http://%1.example.com/somepath/%1/%2 [L]
Run Code Online (Sandbox Code Playgroud)

只要替换路径中的两个“whatever”相同,这就会起作用。如果不是,则必须对最后一个“无论如何”进行硬编码,如下所示:

RewriteRule .*  http://%1.example.com/somepath/whatever/%2 [L]
Run Code Online (Sandbox Code Playgroud)

没有其他办法,因为传入的 URL 没有它。