我必须重写子目录才能转到主域。例如,我有 www.mysite.com,我想将 www.mysite.com/newersite 重写为 www.mysite.com
这是我在 htaccess 文件中使用的内容:
RewriteCond %{HTTP_HOST} ^mysite\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.mysite\.com$
RewriteCond %{REQUEST_URI} !^/newsitecontainer/newsite/
RewriteRule (.*) /newsitecontainer/newsite/$1
重写代码运行良好,但是有两个问题我担心:
1) 在我的 newsitecontainer 中,有两个依赖文件夹,用于使新站点正常工作,“newsite”目录和“data”目录。数据目录需要位于“newsite”文件夹之外(在根目录中)。当前(实时网站)是 www.mysite.com。我想重写这两个子目录,使其充当/显示当前域 www.mysite.com(“data”目录除外,它只需位于正确的位置即可被“newsite”目录调用)。
这是我当前目录结构的简单图表:
http://i56.tinypic.com/s5y1ja.png
我想让“newsite”url 等于当前域 (www.mysite.com),“newsite url”= www.mysite.com。我希望重写“data”目录,使其显示为位于“newsite”目录之外,但仍在根目录 (newsitecontainer) 内。
我刚刚了解 htaccess 这些东西,所以听起来可能有点困惑。我知道我...
2) 第二个问题是,一旦成功重写“newsite”和“data”目录,我想重写“newsite”子目录的内容页面,以显示它们直接是当前域 (www.mysite.com) 的新重写的一部分。我想这样做是因为我使用的平台 (Elgg) 有很多插件,而且 URL 可能很长而且很难看(不利于 SEO 目的)。
因此,例如(成功重写问题#1之后),我想重写类似这样的内容:“www.mysite.com/modfolder/submodfolder/visible-page/”为“www.mysite.com/visible-page/”这会重写对 mod 目录及其子目录(和实际页面)的任何引用,以显示一个干净的 url,即当前域和 mods 目录的实际可见页面。
我知道这一直在做并且可能很容易做到,但考虑到我的情况,我不确定如何正确地重写所述目录。
非常感谢您的帮助。这是我向客户展示此网站时唯一需要做的事情。当然,我可以给他一个 URL 来查看网站,但这完全是为了展示,我需要完成此操作才能使其完全上线并开始推广网站。所以请帮忙。
提前万分感谢!
答案1
这是我的解决方案:
根据文件类型设置环境变量。例如:
RewriteRule (.*)(\.(pdf|jpg|jpeg|gif|png|ico)){1}$ $1$2 [QSA,E=PATH_LOCAL:../staticfiles]
然后稍后通过连接根文件夹和环境变量来测试它是否是一个文件:
RewriteCond %{DOCUMENT_ROOT}/%{ENV:PATH_LOCAL}/%{REQUEST_FILENAME} -f
# The file exists => re-write it to the FULL filename:
RewriteRule ^(.+) %{DOCUMENT_ROOT}/%{ENV:PATH_LOCAL}/%{REQUEST_FILENAME} [QSA,L]
现在有了这些迹象,您可能会找到实现目标的方法;)