Apache htaccess在子目录中添加WWW和更改文件名

Apache htaccess在子目录中添加WWW和更改文件名,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我知道类似的问题也经常出现。我希望有更好的运气 我的根目录中有一个.htaccess文件,将“www”添加到所有内容: RewriteEngine on RewriteCond %{SERVER_NAME} ^mysite.org RewriteRule ^(.*)$ http://www.mysite.org/$1 [R=permanent,L] 这通常效果很好。我有一个子文件夹(/myquick/),其中旧的index.html文件已替换为index.php。我知道有指向/myquick/

我知道类似的问题也经常出现。我希望有更好的运气

我的根目录中有一个.htaccess文件,将“www”添加到所有内容:

RewriteEngine on
RewriteCond %{SERVER_NAME} ^mysite.org
RewriteRule ^(.*)$ http://www.mysite.org/$1 [R=permanent,L]
这通常效果很好。我有一个子文件夹(/myquick/),其中旧的index.html文件已替换为index.php。我知道有指向/myquick/index.html的外部链接,所以我想确保这些链接重定向。保留index.html并尝试从该目录重定向会导致一些奇怪的行为,但在该目录中添加.htaccess可以做到这一点:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.html?$ /myquiz/index\.php [NC,R]
尝试加载index.html会按预期重定向到index.php,如果需要,会添加WWW。但是直接请求mysite.org/myquick/index.php不会添加WWW

我尝试添加“RewriteEngine inherit”,但这导致调用被重定向到我的根文件夹。如果我想使子文件夹不可访问,但在这里没有帮助,这是一个很好的技巧。我还尝试将root.htaccess中的代码添加到子文件夹.htaccess的开头,但效果并不好


有什么想法吗?

您不需要在MyQuike文件夹中添加另一个htaccess文件。这应该适用于站点根目录中的htaccess文件。请删除MyQuike中的htaccess文件,然后重试此操作

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mysite\.org
RewriteRule ^(.*)$ http://www.mysite.org/$1 [R=301,L]
RewriteRule ^myquiz/index\.html$ /myquiz/index.php [R=301,L]

另外,我不会使用
%{SERVER\u NAME}
,除非您确定在配置文件中正确设置了名称。然后它可以比HTTP\U主机更可靠,否则我会改为使用
%{HTTP\u主机}

我认为
继承
会起作用,如果您在
myquick
文件夹中的规则中添加
L
标志:

RewriteRule ^index\.html?$ /myquiz/index\.php [NC,R,L]
因此,它首先重定向,然后应用继承的规则(www)

您也可以将这两条规则放在同一个文件中:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^mysite.org$ [NC]
RewriteRule ^(.*)$ http://www.mysite.org/$1 [R=permanent,L]

RewriteRule ^myquiz/index\.html$ http://www.mysite.org/myquiz/index.php [R=permanent,L]

我尝试使用上面建议的带有[L]标志的继承。这导致被重定向到根文件夹。至于第二个选项,尝试“www.mysite.org/myquick/index.html”不会导致重定向和404(因为文件不存在)。“mysite.org/myquick/index.php”被重定向到“mysite.org/index.php”和一个404文件(同样,没有这样的文件)。谢谢我要明确一点——你不认为只有与本地文件夹相关的重定向存在于该文件夹中有任何好处吗?现在根文件夹.htaccess非常简单,但我可以想象它会变得非常长。@user3291354我认为最好有1,因为apache必须扫描和读取每个目录中的htaccess文件。因此,它“可能”有助于提高性能。如果可能的话,我更喜欢将所有规则都放在根目录中,因为我可以轻松地进行更改,因为所有规则都位于同一位置。