【问题标题】:trying to catch all conditions for URL redirect in htaccess file试图在 htaccess 文件中捕获 URL 重定向的所有条件
【发布时间】:2018-01-23 19:44:11
【问题描述】:

我正在尝试创建一个 htaccess 文件,它将所有可能的 URL 重定向到正确的格式。

我希望所有网址都采用以下格式:

https://www.mywebsite.co.uk/mypage

我所有的网站页面都是filename.php

我目前的htaccess代码如下:

RewriteEngine On

RewriteBase /

# Force WWW prefix
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Force SSL
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

# Remove .php extension
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.+)/$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*)/$ $1.php [L]

# Force trailing slash
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]

这几乎适用于所有情况,但如果我点击这样的链接:

https://www.mywebsite.co.uk/mypage

这应该会自动重定向到:

https://www.mywebsite.co.uk/mypage/

但它不会重定向,也不会添加尾部斜杠。

如何添加到我当前的 htaccess 文件中以捕捉这种情况?

【问题讨论】:

    标签: php apache .htaccess redirect mod-rewrite


    【解决方案1】:

    这样吧:

    Options -MultiViews
    RewriteEngine On
    RewriteBase /
    
    # Force WWW prefix
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
    
    # Force SSL
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
    
    # Remove .php extension
    RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
    RewriteRule (.*)\.php$ /$1/ [L,R=301]
    
    # Force trailing slash
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.+?)/$ $1.php [L]
    

    确保使用新的浏览器进行测试。

    【讨论】:

      【解决方案2】:

      我认为您需要将最后一条规则更改为:

      # Force trailing slash
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule .*[^/]$ $0/ [L,R=301]
      

      虽然文档似乎说RewriteCond %{REQUEST_FILENAME}.php -f 可以工作。测试它证明它没有。如果请求既不是现有文件也不是目录,添加斜线可能不会对您造成伤害。

      【讨论】:

      • 这与我之前的代码的行为方式相同,如果 URL 的类型为 mywebsite.co.uk/mypage,则不会强制使用斜杠
      • 我确实测试成功了。您能否尝试停用其他规则,看看它是否卡在其他地方?
      猜你喜欢
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多