【问题标题】:.htaccess causes redirection.htaccess 导致重定向
【发布时间】:2021-06-13 16:49:25
【问题描述】:

您好,我在 public_html ex.(主文件夹和子文件夹)中有 2 个文件夹。在我的 public_html 与我的 2 个文件夹相同的级别内,我有一个这样的 .htaccess 文件。

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteOptions inherit
Options -Indexes

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php73” package as the default “PHP” programming language.
<IfModule mime_module>
  AddHandler application/x-httpd-ea-php73 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit
RewriteCond %{HTTP_HOST} ^paw\.xevz\.migor\.eu$ [OR]
RewriteCond %{HTTP_HOST} ^www\.paw\.xevz\.migor\.eu$
RewriteRule ^/?$ "http\:\/\/paw\.xevz\.migor\.eu\/mainfolder" [R=301,L]

这个 .htaccess 会将页面重定向到主文件夹。当我尝试像 http://paw.xevz.migor.eu/subfolder 那样查看我的子文件夹时,一切都运行良好,但是由于 url 中没有 index.php,我在尝试查看某些函数时遇到了一些 404 错误。我在我的子文件夹中添加了这个 .htaccess。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

它运行良好,但我发现当我尝试打开 http://paw.xevz.migor.eu/subfolder 时,它会像以前一样将我重定向到主文件夹。为了查看我的代码,我必须像这样查看链接。 http://paw.xevz.migor.eu/subfolder/somefunction。有人可以解释为什么会这样吗?我对 .htaccess 了解不多,也不确定发生了什么。我将在我的 laravel 项目或我的 .htaccess 中做什么来避免这种冲突?所以当我想查看我的子文件夹时,我需要把它放在 url 中? http://paw.xevz.migor.eu/subfolder 没有重定向。谢谢。

【问题讨论】:

    标签: php laravel .htaccess mod-rewrite cpanel


    【解决方案1】:

    在你的根 .htaccess 中有这个规则:

    # using THE_REQUEST make sure we match whitespace (\s) 
    # followed by 1+ / followed by ? or \s
    RewriteCond %{THE_REQUEST} \s/+[?\s]
    RewriteCond %{HTTP_HOST} ^(?:www\.)?paw\.xevz\.migor\.eu$ [NC]
    RewriteRule ^ /mainfolder/ [R=302,L]
    

    THE_REQUEST 变量表示 Apache 从浏览器收到的原始请求,在执行其他重写指令后它不会被覆盖。此变量的示例值为GET /index.php?id=123 HTTP/1.1GET / HTTP/1.1

    确保在测试此更改之前清除浏览器缓存。

    【讨论】:

    • 谢谢伙计。我尝试使用此代码。但是,如果我不将它放在 url 中,该站点将不会重定向到主文件夹。如果我不将主文件夹放在 url 中,我仍然需要重定向。
    • 哪个 URL 没有使用此规则重定向?
    • 当我尝试访问paw.xevz.migor.eu时,我仍然希望它重定向到paw.xevz.migor.eu/mainfolder
    • 谢谢伙计。不幸的是,当我尝试您更新的答案时,我给了我一个错误 500。
    • 哦,我的!!!!!!!!!它正在工作。非常感谢你,伙计。顺便说一句,你能解释一下这段代码的含义吗?
    【解决方案2】:

    您可以通过将此行添加到您的 .htaccess 中来从重定向中排除文件夹:

    RewriteRule ^ (yourFolderName) ($ | /) - [L]
    

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 2014-03-23
      • 1970-01-01
      相关资源
      最近更新 更多