Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache htaccess和重写_Apache_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Apache htaccess和重写

Apache htaccess和重写,apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,我只是在我的网站上做了一个子域名,主要是因为我想要一个特定的地址 假设我的网站是:http://website.com 我的子域是http://sub.website.com主文件夹位于/home/username/public\u html/sub/ 当我输入子域地址时,地址突然变为http//website.com/sub/ 如何保留子域地址 为丹尼斯编辑: 我有一条规则指导所有http://www.website.com至http://website.com 我用 RewriteEngin

我只是在我的网站上做了一个子域名,主要是因为我想要一个特定的地址

假设我的网站是:
http://website.com
我的子域是
http://sub.website.com
主文件夹位于
/home/username/public\u html/sub/

当我输入子域地址时,地址突然变为
http//website.com/sub/

如何保留子域地址

为丹尼斯编辑:

我有一条规则指导所有
http://www.website.com
http://website.com

我用

RewriteEngine on
Redirect to non-www
RewriteCond %{HTTP_HOST} !^(website\.com)?$
RewriteRule (.*) http://website.com/$1 [R=301,L]
即使我将其注释掉,地址仍会更改为

http://website.com/sub/
致以最良好的祝愿,
Alexander

我可以想象这样的东西会起作用(未经测试):

注意:根据选项,需要添加以下SymLinks 这是一个可以覆盖的选项,以使重写工作正常进行

第一次重写将确保不重写“webiste.com”主机(但是 像sub.website.com这样的域名将被删除)。第二个匹配任何东西 直到主机名的第一个点。这两项都必须成功,如果成功的话,主人也必须成功 可以在%1中访问部件

第一个重写规则将参数重写为php脚本中的目录路径 (在浏览器的URL上看到更改)。下一条重写规则使用[P] 将任何形式为/xx/yy/的请求代理到%1.php(我们记忆中的主机名)的标志 将参数传递给php脚本

正如我所说,这是没有测试,但希望它会让你“在正确的方向”


编辑:从第一个重写规则中删除了[R]

另一个解决方案是为您的子域指定一个虚拟主机(应该已经是这样了,否则您会遇到很多问题),并使该虚拟主机忽略主域的.htaccess指令。您应该真正尝试保持子域配置独立于主域配置

假设子域VH中的documentRoot是
/home/username/public_html/sub/
,当Apache提供index.php或index.html文件或此目录中的任何其他文件时,它会在
/home/username/public_html/sub/
/home/username/public_html/
中对所有.htaccess执行递归搜索,
/home/username/
/home/
/
。因此,在主域中定义的规则(我认为它在
/home/username/public\u html/
中)被应用

您可以通过添加以下内容告知此子域VirtualHost忽略VH DocumentRoot之前的所有.htaccess文件:

<Directory />
   AllowOverride None
</Directory>
<Directory /home/username/public_html/sub/>
   AllowOverride All
</Directory>

不允许超限
允许超越所有

您甚至可以删除
AllowOverride All
,删除All.htaccess,并将子域的.htaccess中的内容(如果您有子域)直接放在
部分,效果相同,而无需Apache在文件系统上搜索配置部分(速度更快).

您无法轻松地将
sub.php?blahblah
重写为一个漂亮的url,因为如果没有深入的前提条件检查,重写规则引擎将无法匹配查询字符串。在php级别这样做会更简单。但是,如果我创建一个子域并转到该地址,那么该地址会突然更改为,是否可以保留该地址?也许你有一个重定向脚本。如果没有,这将是一个问题,为您的主机…嗯,也许,我会重定向从www.到非www.检查编辑谢谢我会做一个研究,使它的工作,然后我会张贴回这里,当它工作!
<Directory />
   AllowOverride None
</Directory>
<Directory /home/username/public_html/sub/>
   AllowOverride All
</Directory>