1

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

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]

任何帮助表示赞赏!

4

1 回答 1

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} /([^/]*)$

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

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

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

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

如果是目录,我们重写

否则,下一部分很明显,只是重写了您布置的获取条件。

于 2013-04-14T13:13:39.243 回答