【问题标题】:Setting up prefered versions in .htaccess在 .htaccess 中设置首选版本
【发布时间】:2016-11-19 15:05:44
【问题描述】:

我正在尝试设置一个 .htaccess 文件。如果用户在地址末尾包含 index.php 和 index.html,我想将其设置为仅转到当前文件夹的路径。 如果用户错过了,我希望将 www 添加到地址中。

我在同一个地址运行两个网站。一种是使用根文件夹,另一种是使用文件夹。索引位对两者都有效,但是当我设置 www 时,如果他们错过了它,它会转到根目录而不是文件夹的主页。 谁能建议我在这里需要做什么以及我应该把 .htaccess 文件放在哪里才能让它工作?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^candle-light\.co.uk$ [NC]
RewriteRule ^(.*)$ http://www.candle-light.co.uk/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.candle-light.co.uk/ [R=301,L]
</IfModule>

子文件夹称为闪烁。

【问题讨论】:

    标签: .htaccess


    【解决方案1】:

    %{REQUEST_URI} 变量代替$1 试试这些规则:

    RewriteEngine On
    
    # skip POST requests
    RewriteCond %{REQUEST_METHOD} POST
    RewriteRule ^ - [L]
    
    # add www
    RewriteCond %{HTTP_HOST} ^candle-light\.co\.uk$ [NC]
    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
    
    # remove index.php
    RewriteCond %{THE_REQUEST} /index\.(php|html) [NC]
    RewriteRule ^(.*)index\.(?:html|php)$ /$1 [L,R=301,NC,NE]
    

    【讨论】:

    • 效果很好。我是否需要添加额外的几行,或者我可以修改已经存在的内容以删除 index.html 吗?
    • 我的意思是,您的代码的最后两行删除了 index.php。我可以修改这些行以删除 index.html 还是需要再添加两行来处理 index.html?
    • 大功告成。太感谢了。你是一个真正的明星。
    • POST 数据在重定向后丢失。最好跳过重定向的 POST 请求。现在检查更新的答案。
    • 现在可以了。我假设当有人访问该网站时,它会将他们重定向到正确的版本(添加 www 并删除 index.php)。之后,当他们单击链接发布表单时,他们已经在正确的位置,因此不需要再次重定向它们。对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    相关资源
    最近更新 更多