htaccess动态文件夹重写

时间:2013-04-14 12:21:02

标签: .htaccess

以下是我的情况,我已经想好几天如何制作它,对我来说似乎太复杂了。我想重写以下内容:

http://demo.myurl.com/proevent/event1 to http://demo.myurl.com/index.php?url=proevent&path=event1 

http://demo.myurl.com/proevent/admin to http://demo.myurl.com/admin - when folders exist under that location I want to have them loaded and not falling to /index.php

现在说“proevent”和“event1”是完全动态的!

我确定知道的文件夹是:admin,inc,存在的照片,其余的都是动态的。

在所有重定向的情况下,我想从路径中知道已打开的内容并给出错误信息。

这是我到目前为止所做的:

在人们忘记放置它并且文件夹不存在时跳过斜杠

    RewriteCond %{REQUEST_URI} !(\.|/$)
    RewriteRule (.*) /$1/ [R=301,L]
if dir/file exists (doesn't really work)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ([^/]*)/(.*) /$2%{REQUEST_URI} [R]

也不知道它什么时候起作用,因为它可能在以前的情况下出现

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/(/?.*?)([^/]*)$ index.php?url=$1&path=$2 [L]

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} /([^/]*)$
RewriteCond %{DOCUMENT_ROOT}/%1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%1 -d
RewriteRule /(.*)$ /%1/ [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/(/?.*?)$ index.php?url=$1&path=$2 [L]

会为你做的。

第一部分检查完整目录或子目录是否是文件,第二部分重定向,如果第一部分失败。

更清楚

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

检查这是否是真正的文件或目录。

RewriteCond %{REQUEST_URI} /([^/]*)$

根据您的请求获取网址的最后部分。

RewriteCond %{DOCUMENT_ROOT}/%1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%1 -d

这些检查是/(URL的最后一部分)是文件或目录。这使用了Rewrite的反向引用功能。 %1引用RewriteCond中最后一个RegEx的第一个块。

RewriteRule /(.*)$ /%1/ [L]

如果是目录,我们会重写

否则,下一部分是显而易见的,只是重写你所提出的条件。