我正在努力让这个工作变得非常困难所以我有一个子目录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]
答案 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]