htaccess URL重写中的递归重定向(Apache中的mod_rewrite)

时间:2013-12-12 04:24:33

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

在我的项目的根文件夹中,还有其他几个文件夹,我称之为“apps”。其中一个应用程序的路径如下:

/ 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来引用app文件夹(看看:the_path_to_my_root_folder_here / $ 1 /index.php?params=$2)<< p>

它正在生成以下网址:myDomain.com/myApp/index.php?params=index.php

嗯,我认为这将是一个递归问题。因此,似乎Apache将在第一次执行后尝试另一次重定向,然后它将生成类似的URL

我在Stackoverflow中找到了这个帖子 url rewrite recursively 答案的问题在于它假设我知道何时停止。

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

由于

@EDIT

我现在正在尝试以下规则 RewriteRule myDomain.com/([A-Za-z0-9-]+)/(.*)$/ myDomain.com/$1/index.php?params=$2 [NC,L]

但它不能正常工作。它只匹配正则表达式,如果我没有在应用程序名称后面传递参数。因此,当我尝试myDomain.com/user/时,它可以工作(不接收参数),例如,当我尝试myDomain.com/user/products/1000/时失败。它没有重写/重定向,而是试图在用户

中找到产品文件夹

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

将此规则放在DOCUMET_ROOT/.htaccess

RewriteEngine On

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

无法理解the_path_to_my_root_folder_here

的含义