【问题标题】:Recursive redirection in htaccess URL rewriting (mod_rewrite in Apache)htaccess URL 重写中的递归重定向(Apache 中的 mod_rewrite)
【发布时间】:2020-01-27 18:58:00
【问题描述】:

在我的项目的根文件夹中,还有其他几个我称之为“应用程序”的文件夹。这些应用程序之一的路径类似于:/root_folder/myapp/...

实际上有十几个这样的应用程序。所以我希望我的项目使用友好的 URL,并使用 apache 模块 mod_rewrite 来实现。

我将以下规则添加到我的 .htaccess 中(即在 root_folder 中,让您知道)RewriteRule ([^/]*)/(.*)?$ myDomain.com/$1/index.php?params=$2 [NC,L]

因此,诸如 mydomain/myApp/param/value/param2/value 之类的 URL 将被转换为 mydomain/myApp/index.php?params=value/param2/value

我执行了一些测试并看到它可以正常工作,直到我添加 $1 来引用应用程序文件夹(查看:the_path_to_my_root_folder_here/$1/index.php?params=$2) 这些应用程序之一的路径类似于:`/root_folder/myapp/...** 它正在生成一个 URL,例如:myDomain.com/myApp/index.php?params=index.php

好吧,我认为这将是一个递归问题。所以看起来Apache会在第一次执行后尝试另一个重定向,然后它会生成一个这样的URL

我在 Stack Overflow 中找到了 this thread 答案的问题在于它假设我知道何时停止。

你知道如何停止第二次重定向吗?

我现在正在尝试以下规则 RewriteRule myDomain.com/([A-Za-z0-9-]+)/(.*)$/ myDomain.com/$1/index.php?params=$2 [NC,L],但它无法正常工作。如果我不在应用程序名称后传递参数,它只匹配正则表达式。因此,当我尝试 myDomain.com/user/ 时,它可以工作(不接收参数),而当我尝试 myDomain.com/user/products/1000/ 时,它会失败。它不是重写/重定向,而是尝试在 user 和 etc

中查找文件夹 products

【问题讨论】:

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


    【解决方案1】:

    尝试将您的重写规则更改为与输入 url 匹配但与输出 url 不匹配的内容。像这样的:

    RewriteRule ^([^\/]+)\/([a-z]+)\/(.+)$ /$1/index.php?params=$2/$3
    

    【讨论】:

    • 嘿斯蒂芬妮!它工作正常,但不确定你所说的 2 美元和 3 美元是什么意思。如果我在此 URL 中传递 2 或 3 个“参数”,例如 mydomain.com/list/user/1000/limit/20,我将调用应用程序“列表”并传递 user/1000/limit/20作为要在脚本中拆分和解析的参数。最好的办法是把它分成两部分,比如 app&params 然后调用 app 传递参数。有什么想法吗?
    • 不是一起捕获所有参数,而是将它们拆分,以便 $2 将捕获您的第一个参数名称,而 $3 将捕获第一个参数值以及您可能拥有的任何其他参数。这样你的重写规则更具体,不会再次匹配你的 index.php url。
    【解决方案2】:

    将此规则放在DOCUMET_ROOT/.htaccess:

    RewriteEngine On
    
    RewriteRule ^([^/]+)/(.+)$ /$1/index.php?params=$2 [L,QSA]
    

    无法理解the_path_to_my_root_folder_here的意思

    【讨论】:

    • 我的意思是我的根文件夹 URL。我将编辑我的原始帖子
    • 所以我尝试了这个,它实际上让事情变得更糟。现在递归并没有停止。它用 &params=index.php 填充整个地址栏
    • 你能告诉.htaccess文件的位置吗?
    • 根目录类似于 myProjectName/www/ 所以我的 .htaccess 在这个“www”文件夹中。 APP也在www里面,比如myProjectName/www/myApp/
    • 好的,谢谢,您输入的 URL 是:http://mydomain/myApp/param/value/param2/value2? myProjectName/www/myApp/ 中也有任何 .htaccess 吗?最后,如果myProjectName/www/.htacccess 中有更多规则,请在您的问题中提供它们。
    猜你喜欢
    • 2019-02-02
    • 1970-01-01
    • 2020-05-14
    • 2014-10-06
    • 1970-01-01
    • 2014-09-05
    • 2012-11-12
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多