【问题标题】:htaccess rewrite applying to all, not intendedhtaccess 重写适用于所有,不打算
【发布时间】:2015-09-18 03:27:19
【问题描述】:

在我的根 .htaccess 我有

Options +FollowSymlinks
Options -Indexes
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/dashboard/
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^dashboard.domain.com
RewriteRule ^(.*)$ /dashboard/$1 [NC,L,NS]

在仪表板文件夹的 .htaccess 我有..

RewriteRule ^go/([^/.]+)/?$ index.php?flag=$1 [L]

当我转到 dashboard.domain.com/login 时,它会抛出一个错误。 当我转到 dashboard.domain.com/go/a 时,它可以工作。

当我 # 退出仪表板重写规则时,会发生相反的情况,/login 有效,但 /go/$1 无效。为了使 /go 重写仅在检测到 /go 时应用,我缺少什么?

编辑(根 htaccess 的其余部分)

AddHandler application/x-httpd-php54 .php

Options +FollowSymlinks
Options -Indexes
RewriteEngine on

RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_URI} !^/rocket/
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^launch.domain.com
RewriteRule ^(.*)$ /rocket/$1 [NC,L,NS]

RewriteCond %{REQUEST_URI} !^/dashboard/
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^dashboard.domain.com
RewriteRule ^(.*)$ /dashboard/$1 [NC,L,NS]

RewriteCond %{REQUEST_URI} !^/img/
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^img.domain.com
RewriteRule ^(.*)$ /img/$1 [NC,L,NS]

#RewriteCond %{HTTPS} off
#RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

#RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com [NC]
#RewriteCond %{HTTP_HOST} !launch.domain.com [NC]
#RewriteRule ^(.*)$ https://launch.domain.com/$1 [R=301,L,QSA]

Redirect 301 /sneakpeek /

RewriteRule ^error/([^/]+) error/failure.php?code=$1

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

<FilesMatch "\.(ttf|otf|eot|woff|jpg|png|jpeg|gif|js|json|html|css|php)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>

ErrorDocument 400 /error/400
ErrorDocument 401 /error/401
ErrorDocument 403 /error/403
ErrorDocument 404 /error/404
ErrorDocument 500 /error/500

【问题讨论】:

  • @anubhava “在此服务器上找不到请求的 URL /dashboard/login。此外,在尝试使用 ErrorDocument 处理请求时遇到了 404 Not Found 错误。”我将编辑帖子以包含其余内容。

标签: regex apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

仪表板规则下方的规则可能会影响您的规则并更改 %{REQUEST_URI} 变量。您可以使用THE_REQUEST 变量并在清除浏览器缓存后重新测试:

RewriteCond %{THE_REQUEST} !/(dashboard|error)/
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} =dashboard.domain.com
RewriteRule ^(.*)$ dashboard/$1 [NC,L]

【讨论】:

  • 不幸的是,当我将代码更改为此并清除缓存时,它最终会重定向到 500 错误。无论仪表板 .htaccess 重写是否被注释掉,都会发生这种情况。我尝试将您提供的代码更改为 https,因为我有一个通配符 SSL 证书,但结果相同。
  • 同样的错误。错误日志显示“public_html/dashboard/login”的一堆文件不存在该站点是dashboard.rocketlobby.com——我已经恢复到原来的重写规则,并且没有/go rewrite注释掉了,是404错误。
  • 有了这条规则,https://dashboard.rocketlobby.com/login 将被路由到https://dashboard.rocketlobby.com/dashboard/login。即使我直接在浏览器中输入https://dashboard.rocketlobby.com/dashboard/login 也会导致 404
  • 但是你还需要.php/dashboard/.htaccess 中添加规则。在 root .htaccess 中拥有相同的规则将无法正常工作。
  • 哇.. -_- 真令人沮丧。这解决了这一切。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多