2014-02-18 56 views
0

我知道类似的问题出现了,虽然经常是without a working answer。我希望能有更好的运气!htaccess添加WWW并更改子目录中的文件名

我有我的根目录添加.htaccess文件“www”的一切:

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

这通常工作正常。我有一个子文件夹(/ myquiz /),其中旧的index.html文件已被index.php替换。我知道有/myquiz/index.html的外部链接,所以我想确保这些重定向。到位离开index.html,然后试图从重定向导致了一些奇怪的行为,但在该目录中添加一个.htaccess工作为:

RewriteEngine On 
RewriteBase/
RewriteRule ^index\.html?$ /myquiz/index\.php [NC,R] 

试图加载的index.html重定向到index.php如所希望的那样,并且如果需要的话WWW被添加。但直接请求mysite.org/myquiz/index.php 不是添加WWW。

我试着添加“RewriteEngine inherit”,但导致调用重定向到我的根文件夹。如果我想让子文件夹无法访问,但在这里没有帮助,这是一个很好的窍门。我也尝试将我的根.htaccess中的代码添加到我的子文件夹的.htaccess的开头,但这并没有更好。

任何想法?

回答

0

您不需要在myquiz文件夹中添加另一个htaccess文件。这应该在网站根目录下的htaccess文件中工作。删除myquiz中的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_NAME}除非您确信该名称在配置文件中正确设置。然后它可以比HTTP_HOST更可靠,否则我会使用%{HTTP_HOST}

+0

这个工作。谢谢!只是要清楚 - 你认为没有任何好处,只有与本地文件夹相关的重定向才在该文件夹中?现在根文件夹.htaccess非常简单,但我可以想象它变得很长。 – hartshoj

+0

@ user3291354我认为最好是1,因为apache必须扫描并读取htaccess文件的每个目录。所以这可能会对性能有所帮助。如果可能,我更愿意在根中拥有所有规则,因为我可以轻松地进行更改,因为所有规则都位于同一个位置。 –

0

我认为,如果你添加一个L标志您在myquiz文件夹中有规则inherit将工作:

RewriteRule ^index\.html?$ /myquiz/index\.php [NC,R,L] 

所以它重定向第一,然后是继承的规则(万维网)获取后应用。

你也可以只是把两个规则在同一个文件:

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] 
+0

我试着用上面建议的[L]标志继承。这导致被重定向到根文件夹。 – hartshoj

+0

至于第二个选项,尝试“www.mysite.org/myquiz/index.html”导致没有重定向和404(导致文件不存在)。 “mysite.org/myquiz/index.php”被重定向到“mysite.org/index.php”和404(再次没有这样的文件)。 – hartshoj