在我的项目的根文件夹中,还有其他几个文件夹,我称之为“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/时失败。它没有重写/重定向,而是试图在用户等
中找到产品文件夹答案 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