mod_rewrite用于从URL中删除特定目录,但仍显示内容

时间:2012-05-09 19:47:01

标签: .htaccess url mod-rewrite directory

我想在我的网站的.htaccess中创建一个重写,以便当用户请求URL A时,内容来自URL B,但用户仍然将URL视为URL A.

所以,例如,假设我在mydomain.com/projects/project-example上有内容。我希望用户能够请求mydomain.com/project-example,仍然可以在地址栏中看到该URL,但浏览器应显示mydomain.com/projects/project-example中的内容。

我已经查看了几个.htaccess重写提示和常见问题解答,但不幸的是,它们似乎都没有提供我上面所描述的解决方案。并非我域上的所有内容都来自/ projects /目录,所以我想重写时应检查页面是否存在,因此它不会将/ projects /追加到每个url。我真的很难过。

如果重写不是我需要的,或者如果有一个简单的解决方案,我很乐意听到它。

1 个答案:

答案 0 :(得分:1)

本教程应该包含您需要的所有内容,包括准确解决您的问题:http://httpd.apache.org/docs/2.0/misc/rewriteguide.html。这可能只是一个术语问题。

  

所以,例如,假设我在mydomain.com/projects/project-example上有内容。我希望用户能够请求mydomain.com/project-example,仍然可以在地址栏中看到该URL,但浏览器应显示mydomain.com/projects/project-example中的内容。

有类似的东西:

RewriteRule ^project-example$ /projects/project-example [L]

当有人请求http://mydomain.com/project-example并且URI /project-example被内部重写为/projects/project-example时。请注意,当它位于.htaccess文件中时,URI /project-example会在匹配时删除前导斜杠。

如果你有一个东西的目录,你可以使用正则表达式和反向引用,例如你希望http://mydomain.com/stuff/的任何请求映射到/internal/stuff/

RewriteRule ^stuff/(.*)$ /internal/stuff/$1 [L]

因此,对http://mydomain.com/stuff/file1.htmlhttp://mydomain.com/stuff/image1.png等的请求会被重写为/internal/stuff/file1.html/internal/stuff/image1.png等。