我需要创建一个以下规则来放入我的.htaccess
假设.htaccess位于http://domain/folder
当用户打开网址http://domain/folder/Subfolder/xxx.html时 他应该从http://domain/folder/subdir/Subfolder/xxx.html
收到档案所以这些规则必须考虑subir中有子文件夹这一事实。 (子文件夹的不同结构:-) 并且只有当subdir下的路径不存在时,才应将请求转发到index.php
Plase help :)。
ps这是我之前的一个后续问题。它完全不同,包括subdir中有子文件夹的事实。 - > mod_rewrite: How to search in local folder, subfolder and then redirect to index.php
答案 0 :(得分:3)
为什么不简单地使用别名:
Alias /folder /subdir
并在您的404页面中重定向到index.php?它具有优势,404仍然被捕获到博客中。
答案 1 :(得分:3)
尝试将以下内容添加到您网站的.htaccess
目录中的root/folder
文件中。
RewriteEngine on
RewriteBase /folder
#capture the Subfolder/file.xx
RewriteCond %{REQUEST_URI} ^/[^/]+/([^/]+)$
#if the subdir/subfolder/file.xx exists
RewriteCond %{DOCUMENT_ROOT}/subdir/%1 -f
#Serve this file
RewriteRule ^ /subdir/%1 [L,S=1]
#else send to index.php in root directory
RewriteRule ^ /index.php [L]
我假设您要将请求发送到根目录中的index.php。如果它位于文件夹目录中,请将最后一条规则更改为
RewriteRule ^ index.php [L]
答案 2 :(得分:2)
这应该这样做:
RewriteEngine on
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteCond %{REQUEST_URI} ([\w]+\.[\w]+)$ [NC]
RewriteCond %{DOCUMENT_ROOT}/%1 -f
RewriteRule ^ /%1 [NC,L]
RewriteCond %{DOCUMENT_ROOT}/subdir%{REQUEST_URI} -f
RewriteRule ^ /subdir%{REQUEST_URI} [L]
RewriteRule ^ /index.php [L]
RewriteEngine on
#RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^[^/]+\.[^/]+$ - [NC,L]
RewriteCond %{REQUEST_FILENAME} (.*/)([\w]+\.[\w]+)$ [NC]
RewriteCond %1subdir/%2 -f
RewriteRule ^ subdir/%2 [L]
RewriteRule ^ index.php [L]
更改日志:
RewriteBase评论了相对路径的使用。
检查/file.ext(或是否在当前目录中)。 以下将检查当前目录中是否存在文件。
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^[^/]+\.[^/]+$ - [NC,L]
RewriteCond%{DOCUMENT_ROOT} / subdir%{REQUEST_URI} -f
捕获%1中的当前目录和%2中的file.ext