6

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

在重写规则中重用子域

结果是当有人进入

whatever.example.com/anypage

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

whatever.example.com/somepath/whatever/anypage

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

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

重定向总是改变浏览器的 URL 地址栏中的内容

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

example.com/article-1-15

但实际上显示的内容

example.com/somepath/somepage.php?article=1&otherparam=15

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

4

1 回答 1

2

你可以尝试这样的事情:

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

它将映射:

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]

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

RewriteRule .*  http://%1.example.com/somepath/whatever/%2 [L]

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

于 2012-12-28T17:02:22.140 回答