如何别名或将子文件夹重写为域

时间:2019-02-23 09:36:17

标签: php apache mod-rewrite virtualhost mod-alias

我有这样的文件夹结构

/
/project1

我通常将其与一个域(example.com)一起使用,但是现在我想将其用作单独的域(project1.example.com),并且我正在使用apache virtualhost。 我已经成功安装,但是链接上发生了一些问题。 project1中的所有超链接都是包含“ project1”子文件夹的路径(例如project1 / image / pic.jpg)。 我这样设置

DocumentRoot /doc_root/
Alias /project1 /doc_root/project1/
Alias / /doc_root/project1

RewriteRule /project1/(.*) /$1 [R]

问题是当我重写干净的URL时 例如example.com/project1/post?id=1 => project1.example.com/post/1 与

RewriteRule ^/post/(\d+)$ /project1/post.php?id=$1 [PT,NC,L,QSA]

页面的Ajax帖子中出现404错误 由于ajax网址指向/project1/process.php 而且我认为此请求不会重写。

像这样进行设置的正确方法是什么?谢谢!

1 个答案:

答案 0 :(得分:0)

这里有几个问题:

  1. 别名规则看起来不正确并且令人困惑。
  2. 您提供的重定向规则不会提取查询字符串参数(即不会将路径从/project1/post?id=1重写为/post/1),也不会更改域名(即不会)将该域更改为project1.example.com)。
  3. 不需要重定向。

我认为您想要的是这样的东西

DocumentRoot /doc_root/

RewriteCond %{HTTP_HOST} ^project1\.example\.com$
RewriteRule ^/(.*)$ /project1/$1 [NC,PT]

如果您确实要重定向,请考虑:

RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^/project1/(.*)$ project1.example.com/$1 [NC,R]