如果文件不存在,则htaccess指向子目录的请求,并且在子目录

时间:2016-05-24 19:37:48

标签: apache .htaccess

我正在努力让这个工作变得非常困难所以我有一个子目录example.com/projects,其目录下面有一个名为test的目录,如果有人打字,我会喜欢它example.com/test它会显示来自example.com/projects/test的文件,但如果该文件不存在,我希望它发布404错误。

此外,如果可能,我希望任何时候输入example.com/projects/test它会重定向到example.com/test,但如果有人去projects/,我希望他们能够留在那里。< / p>

到目前为止,我已尝试过以下.htaccess文件

这几乎完美地传递了文件,除非文件不存在,它会引发500内部服务器错误

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ projects/$1 [PT]

我认为如果文件存在于项目下但根本不起作用,这样的事情可能只能通过:

RewriteCond projects/%{REQUEST_FILENAME} -f
RewriteCond projects/%{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ projects/$1 [PT]

对于第二部分,指向/projects/test去除/projects的任何内容我试过这个(放在上面的代码之前)

RedirectMatch ^/projects/(.+)$ /$1

仅查找重定向循环。我该如何防止这种情况?

我当前的.htaccess文件供参考:

ErrorDocument 404     /404.html

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^example2\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example2\.com$
RewriteRule ^/?$ "http\:\/\/example3\.org" [R=301,L]

#RedirectMatch ^/projects/(.+)$ /$1
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(.*)$ projects/$1 [PT]

1 个答案:

答案 0 :(得分:1)

您可以在根目录中使用这些规则.htaccess:

DirectoryIndex index.html
RewriteEngine On

RewriteCond %{THE_REQUEST} /projects/(\S+)\sH [NC]
RewriteRule ^ /%1 [L,R=302,NE]

RewriteCond %{DOCUMENT_ROOT}/projects/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/projects/$1 -d
RewriteRule ^(.+)$ projects/$1 [L]