.htaccess mod_rewrite包含动态文件夹

时间:2012-05-24 20:48:51

标签: apache mod-rewrite

我已经尝试了一段时间坚果却无法开始工作:

RewriteRule ^([^])/([^])\.php$ /$1.php [L,QSA]

我有一个网站: www.mysite.com/dummyfolder/file.php

我希望它实际加载:

www.mysite.com/file.php

仅供参考 - 虚拟文件夹是动态的,因此会发生变化。

更复杂的部分,我希望能够忽略某些文件夹,例如能够访问:www.mysite.com/acutalfolder/file.php。 acutalfolder存在且不改名的地方。

非常感谢 - 它真的让我陷入困境,无法理解。

Ansari,感谢您的回答和解决,但我需要更正我的实际文件夹声明:

我的实际文件夹位于:

www.mysite.com/acutalfolder/file.php 

但我希望像这样出现在网址中:

www.mysite.com/dummyfolder/acutalfolder/file.php 

如果我使用它(如果我使用的是实际文件夹,则尝试忽略):

RewriteRule ^([^/]+)(!^actualfolder$)/([^/]+)\.php$ /$2.php [L,QSA] 

它可以很好地转到实际的文件夹地址,但原来的重写页面不再有效。我遇到这个错误的任何想法?

更新在安萨里的帮助下。现在使用以下代码可以很好地工作:

RewriteCond %{REQUEST_URI} ^/([^/]+)/(actualfolder/.*\.php)$
RewriteCond %{DOCUMENT_ROOT}/%2 -f
RewriteRule .* %2 [L,QSA]


RewriteCond %{REQUEST_URI} ^/(?!actualfolder)([^/]+)/(.*\.php)$
RewriteCond %{DOCUMENT_ROOT}/%2 -f
RewriteRule .* %2 [L,QSA]

非常感谢......

2 个答案:

答案 0 :(得分:2)

试试这个:

RewriteRule ^([^/]+)/([^/]+)\.php$ /$2.php [L,QSA]

至于何时存在实际文件夹,除非你在实际文件夹中的另一个.htaccess文件中进行一些重写,否则你不需要为此做任何事情。

OP重新提出问题之后

编辑

RewriteCond %{REQUEST_URI} ^/([^/]+)/(actualfolder/.*\.php)$
RewriteCond %{DOCUMENT_ROOT}/%2 -f
RewriteRule .* %2 [L,QSA]

RewriteCond %{REQUEST_URI} ^/([^/]+)/(.*\.php)$
RewriteCond %{DOCUMENT_ROOT}/%2 -f
RewriteRule .* %2 [L,QSA]

答案 1 :(得分:0)

更新在安萨里的帮助下。现在使用以下代码可以很好地工作:

RewriteCond %{REQUEST_URI} ^/([^/]+)/(actualfolder/.*\.php)$
RewriteCond %{DOCUMENT_ROOT}/%2 -f
RewriteRule .* %2 [L,QSA]


RewriteCond %{REQUEST_URI} ^/(?!actualfolder)([^/]+)/(.*\.php)$
RewriteCond %{DOCUMENT_ROOT}/%2 -f
RewriteRule .* %2 [L,QSA]

非常感谢......