我有一个基于PHP的网站,我想使其更加安全并且对SEO更友好。我的网站有两个文件夹private
和site
。所有面向公众的页面,css,脚本,图像都位于site
文件夹中。我所有的后端PHP代码都在private
文件夹中。目前,我正在通过使用Deny from all
文件夹中的.htaccess
文件中的private
保护对私有文件夹的任何访问。在我的本地服务器上(当前使用XAMPP),该项目位于我的htdocs
文件夹中,并且具有一个项目名称,我们将其称为example_project
。在site
文件夹下,我还有一些其他子目录,它们整理了CSS,JS,图像以及站点中页面的一些主要子类别。我正在努力找出方法,以使(A)该URL不需要在URL中包含site
即可访问位于其下的任何内容,并且( B),它将更改要重写的URL中包括site
的所有请求,以将其从路径中排除。
(A)示例
example_project/subfolder/index.php
访问example_project/site/subfolder/
(B)示例
example_project/site/subfolder/index.php
重定向到example_project/subfolder/
几乎每个目录中都有一个.htaccess
文件。在我的项目的顶层(请注意,这不是服务器Web根目录),我有以下.htaccess
文件
<FilesMatch "\.(css|flv|gif|htm|html|ico|jpe|jpeg|jpg|js|png|pdf|swf|txt|php)$">
#Used to allow for content expiration
<IfModule mod_expires.c>
ExpiresActive Off
</IfModule>
<IfModule mod_headers.c>
FileETag None
Header unset ETag
Header unset Pragma
Header unset Cache-Control
Header unset Last-Modified
Header set Pragma "no-cache"
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Expires "Mon, 10 Apr 1972 00:00:00 GMT"
</IfModule>
</FilesMatch>
RewriteEngine On
#Force site to require https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#Allow links not to have the .php file extension
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]
#THIS IS WHAT I AM HAVING TROUBLE WITH
RewriteRule ^$ site/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !^site /example_project/site/$1 [NC,L]
编辑
请注意,我也记得添加了一个捕获组,因此最后一行现在显示为RewriteRule !^site/([-/\w]+) /hb1/site/$1 [NC,L]
答案 0 :(得分:1)
注释掉前两个http->https
和.php
规则并使用这些规则进行测试
RewriteEngine On
RewriteRule ^$ site/ [L]
RewriteRule ^(?!site/).* site/$0 [NC,L]