【问题标题】:htaccess adding WWW and changing filename in subdirectoryhtaccess 在子目录中添加 WWW 和更改文件名
【发布时间】:2014-02-18 09:40:35
【问题描述】:

我知道有人提出过类似的问题,但经常是without a working answer。我希望有更好的运气!

我的根目录中有一个 .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 继承”,但这导致调用被重定向到我的根文件夹。如果我想让子文件夹无法访问,这是一个很好的技巧,但在这里没有帮助。我还尝试将根 .htaccess 中的代码添加到子文件夹 .htaccess 的开头,但效果并不好。

有什么想法吗?

【问题讨论】:

    标签: apache .htaccess mod-rewrite redirect


    【解决方案1】:

    您不需要在 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}

    【讨论】:

    • 这行得通。谢谢!为了清楚起见-您认为将仅与本地文件夹相关的重定向放在该文件夹中没有任何优势吗?现在根文件夹 .htaccess 非常简单,但我可以想象它会变得很长。
    • @user3291354 我认为最好有 1 因为 apache 必须扫描并读取每个目录中的 htaccess 文件。所以它“可能”有助于提高性能。如果可能的话,我更喜欢将所有规则都放在根目录中,因为我可以轻松地进行更改,因为所有规则都在同一个位置。
    【解决方案2】:

    我认为如果您将L 标志添加到您在myquiz 文件夹中的规则中,inherit 会起作用:

    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/myquiz/index.html”会导致没有重定向和 404(因为文件不存在)。 “mysite.org/myquiz/index.php”被重定向到“mysite.org/index.php”和一个404(同样,没有这样的文件)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多