如何在重定向中删除URL的特定部分?

时间:2014-07-14 10:52:23

标签: php apache .htaccess web url-rewriting

我们的托管服务允许我们通过在服务器的IP之后附加波浪号后的帐户名的前八个字母来访问特定帐户。例如:

123.456.123.456/~examples

这也意味着我们可以通过以下网址访问该网站:

example.com/~examples

我们有一些基本的.htaccess代码可以将其重写为:

example.com/

我们想要做的是相同的,但对于整个网站的所有网址,使用.htaccess中的单个规则。例如:

example.com/~examples/about-us

重定向至:

example.com/about-us

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

将此规则放在根目录中.htaccess:

RewriteEngine On

RewriteCond %{THE_REQUEST} /~\w+/(\S+)
RewriteRule ^ /%1 [R=302,L,NE]

您必须使用%{THE_REQUEST}变量来匹配~user,否则Apache会从~user剥离REQUEST_URITHE_REQUEST变量表示Apache从您的浏览器收到的原始请求,并且在执行某些重写规则后不会被覆盖。此变量的示例值为GET /~user//index.php?id=123 HTTP/1.1

答案 1 :(得分:1)

以下内容可以满足您的需求:

RewriteRule    ^~examples\/?(.*)$    $1    [NC,L]

有关详情,请参阅URL Rewriting for Beginners

答案 2 :(得分:0)

也许是这样的

RewriteRule ^(.*)$ /~example/$1 [L,QSA]

答案 3 :(得分:0)

这应该有效:

RewriteRule ^~example/?(.*)$ $1 [L,QSA]

我发现这是Regex s:http://www.regular-expressions.info/quickstart.html

的非常方便的指南