【问题标题】:internal mod_rewrite leads to infinite redirects内部 mod_rewrite 导致无限重定向
【发布时间】:2014-09-12 12:17:25
【问题描述】:

我在localhost:8080 上有一个服务器,我已经通过一个名为ngrok 的隧道软件向它发送请求,所以现在我想设置我的 mod_rewrite 策略来映射和服务来自 @ 的任何请求987654323@ 到 localhost:8080 无需重定向浏览器

# Turn on rewrites
RewriteEngine on
###
## Rules for "mysubdomain.ngrok.com"
###
RewriteCond %{HTTP_HOST} ^mysubdomain.ngrok.com$
RewriteRule .? %{REQUEST_URI} [L]
###
## Rules for "localhost:8080"
###
RewriteCond %{HTTP_HOST} ^localhost:8080$
RewriteRule . - [E=REWRITEBASE:/prestashop/]
RewriteRule ^api/?(.*)$ %{ENV:REWRITEBASE}webservice/dispatcher.php?url=$1 [QSA,L]

但我最终陷入无限重定向循环! 避免这种情况并实现我的目标的最佳方法是什么?

[/initial] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] add path info postfix: /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/api -> /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/api/products
[/initial] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] strip per-dir prefix: /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/api/products -> api/products
[/initial] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] applying pattern '.?' to uri 'api/products'
[/initial] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] RewriteCond: input='mysubdomain.ngrok.com' pattern='^mysubdomain.ngrok.com$' => matched
[/initial] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] rewrite 'api/products' -> '/prestashop/api/products'
[/initial] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] internal redirect with /prestashop/api/products [INTERNAL REDIRECT]
[/initial/redir#1] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] add path info postfix: /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/api -> /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/api/products
[/initial/redir#1] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] strip per-dir prefix: /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/api/products -> api/products
[/initial/redir#1] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] applying pattern '.?' to uri 'api/products'
[/initial/redir#1] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] RewriteCond: input='mysubdomain.ngrok.com' pattern='^mysubdomain.ngrok.com$' => matched
[/initial/redir#1] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] rewrite 'api/products' -> '/prestashop/api/products'
[/initial/redir#1] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] internal redirect with /prestashop/api/products [INTERNAL REDIRECT]
...
[/initial/redir#10] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] add path info postfix: /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/api -> /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/api/products
[/initial/redir#10] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] strip per-dir prefix: /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/api/products -> api/products
[/initial/redir#10] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] applying pattern '.?' to uri 'api/products'
[/initial/redir#10] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] RewriteCond: input='mysubdomain.ngrok.com' pattern='^mysubdomain.ngrok.com$' => matched
[/initial/redir#10] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] rewrite 'api/products' -> '/prestashop/api/products'
[/initial/redir#10] [perdir /Users/root/dev/bitnami-ps1/apps/prestashop/htdocs/] internal redirect with /prestashop/api/products [INTERNAL REDIRECT]

【问题讨论】:

    标签: apache .htaccess mod-rewrite redirect ngrok


    【解决方案1】:

    查看日志和规则我可以​​看到这条规则导致了无限循环:

    RewriteCond %{HTTP_HOST} ^mysubdomain.ngrok.com$
    RewriteRule .? %{REQUEST_URI} [L]
    

    因为它无条件地为 domain=mysubdomain.ngrok.com 写一个 URI 给自己

    只需将其注释掉,循环就会得到修复。

    【讨论】:

    • 我承认这条规则是不正确的,但我要问的是如何纠正它以实现我的目标。
    • 正如我所建议的那样只需将其注释掉,因为这条规则没有做任何事情或没有做你想做的事情。如果您使用此规则阐明您打算做什么,我可以提出一些建议。
    • 我想设置我的 mod_rewrite 策略来映射和服务从 mysubdomain.ngrok.com 到 localhost:8080 的任何请求,而无需重定向浏览器。
    • 你想在浏览器 localhost 或 mysubdomain 中显示什么 URL?您还可以控制双方的服务器配置吗?
    • 在浏览器中,我想显示 mysubdomain.ngrok.com:80,我可以控制 localhost:8080 apache 服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 2021-05-08
    • 2013-08-21
    相关资源
    最近更新 更多