以下是我的情况,我已经想好几天如何制作它,对我来说似乎太复杂了。我想重写以下内容:
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]
感谢任何帮助!
答案 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]
如果是目录,我们会重写
否则,下一部分是显而易见的,只是重写你所提出的条件。