获取变量显示在子子目录重写,.htaccess,mod_rewrite

时间:2011-09-30 17:17:10

标签: apache .htaccess mod-rewrite

这是我的.htaccess:

Options +FollowSymLinks  
Options +Indexes  
RewriteEngine On  
RewriteCond %{REQUEST_FILENAME} -d  
RewriteRule ([^/]+/.*) index.php?dir=%{REQUEST_URI}  

htaccess存在于test.com/main/.htaccess
中 我可以访问test.com/main/和test.com/index.php罚款 test.com/main/directory被重写为test.com/main/index.php?dir=/main/directory/但是test.com/main/directory保留在url栏中。这很好。

问题是当我尝试访问子子目录时。当我访问test.com/main/foler1/folder2时,它会被重写为index.php?dir = / main / folder1 / folder2 /。这也很好,但是test.com/main/folder1/folder2/?dir=/main/folder1/folder2/显示在地址栏中,而不是在网址栏中保留test.com/main/folder1/folder2。这就是问题。

我希望所有子目录,而不仅仅是main的直接子目录,在重写时将目录保留在url栏中。直接的孩子这样做很好,但是在我的get变量显示的方式下重写的任何目录。

这次重写的目的是让我不必将index.php文件复制到每个新创建的文件夹中,因此将.htaccess复制到每个文件夹都会失败。

2 个答案:

答案 0 :(得分:0)

你可能想要RewriteRule ([^/]+/.*) index.php?dir=%{REQUEST_URI} [QSA,L](如果规则成功,L会阻止mod重写处理任何进一步的规则)QSA会附加任何可能已经传入的查询字符串。

更新

问题是服务器正在重写没有斜杠(可见)的URL作为带有斜杠的URL,并将重写规则作为其中的一部分。解决方法是仅在URL以斜杠结束时处理规则,例如:

RewriteRule ([^/]+/.*/$) index.php?dir=%{REQUEST_URI} [QSA,L]

这样它将在两个单独的步骤中进行重写:

  1. 明显添加斜杠。
  2. 使用您的规则重写index.php
  3. 而不是:

    1. 将斜杠和重写添加到index.php中。

答案 1 :(得分:0)

我将添加我在测试mootinator解决方案时找到的解决方案。

而不是链接到 test.com/main/foler1/folder2

链接到
test.com/main/foler1/folder2/(包括斜杠!)

重定向将成功重定向到
index.php?dir = / main / folder1 / folder2 /


test.com/main/foler1/folder2/
留在网址栏。

这是一个有些狡猾的解决方案,但它应该可以正常工作。