Php .htaccess从站点根目录重定向到公用文件夹,隐藏;“公众”;在URL中?
下面是我的站点目录结构:Php .htaccess从站点根目录重定向到公用文件夹,隐藏;“公众”;在URL中?,php,regex,apache,.htaccess,mod-rewrite,Php,Regex,Apache,.htaccess,Mod Rewrite,下面是我的站点目录结构: htdocs/ My-Project/ public/ index.php css/ img/ js/ src/ config.php templates/ library/ 我不希望任何用户直接访问src目录中的任何文件src包含我的模板和后端逻辑脚本 我想设置
htdocs/
My-Project/
public/
index.php
css/
img/
js/
src/
config.php
templates/
library/
我不希望任何用户直接访问src
目录中的任何文件src
包含我的模板和后端逻辑脚本
我想设置我的.htaccess
,这样当用户访问我的网站(根文件夹我的项目
)时,他们会被重定向到我的项目/public/index.php
。我希望URL在索引页面上看起来像My Project.com
有什么帮助吗?我对修改我的.htaccess文件犹豫不决,因为我在这里和网上看到了很多相互矛盾的建议,关于如何最好地进行修改。将此代码放入
/my Project/.htaccess
:
RewriteEngine On
RewriteBase /My-Project/
RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]
RewriteRule ^((?!public/).*)$ public/$1 [L,NC]
将以下内容添加到.htaccess的第一行
DirectoryIndex public/index.php public/index.html
我对@anubhava在使用localhost和友好URL时的反应做了一些修改 目录结构:
- /(本地主机根文件夹)
- myapp/
- 公开的/
- index.php
- 核心/
- 一些核心文件
- myapp/
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]
myapp/public/index.php
<?php
echo 'Hello<br>';
echo $_SERVER['QUERY_STRING'];
这对我一直都很有效。在公用文件夹外的根目录中创建一个.htaccess,然后添加这三行,解决问题
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
顺便说一句,为什么首先需要一个公共目录?如果您使用的是共享主机,那么唯一的方法就是通过.htaccess。如果您有一个VPS,那么您可以使用主机设置将服务器指向该公用文件夹。@AndrewBarber:我想这是没有要求的,我只是尽量将前端代码和逻辑代码分开,这种结构有助于我保持组织。不过,我对建议持开放态度,我是大型PHP项目的新手:)好吧,通常认为站点的根目录是“公共”部分。但是,如果您有不希望通过请求访问的代码,它应该完全位于web目录之外,如@checkerdmichael notes@checkerdmichael:yes共享主机。我知道我需要通过.htaccess
来完成这项工作,但我不确定哪些命令可以完成我需要的两项任务。我是否需要在根目录中使用.htaccess重定向到/public/文件夹,然后在/public/中使用另一个来格式化URL?这部分工作正常,除了返回404的图像外,所有内容都会加载。这是因为我正在使用,它让我在/public/
目录中创建一个.htaccess
,它将图像请求重定向到视网膜。有没有办法让这两种方法配合得很好?这是可以做到的,你能从/My Project/public/.htaccess
.htaccess发布你的.htaccess吗?@pathros:这是一个行之有效的解决方案。您可以发布一个包含所有详细信息的新问题来解决问题。由于可能的配置错误,我得到的请求超过了10个内部重定向的限制。
对我有效。注意:如果您使用的是XAMPP或类似工具,您的/htdocs/my project/.htaccess
文件也应该使用RewriteBase/my project/
@Pathros请确保将其放在重写引擎语句之后似乎只加载pub/index.php
-不加载相关页面?它可以工作,但如果我在URL中放置public,它也可以工作,而且由于Google已使用public对URL进行了索引。你知道有什么方法可以将带有public的URL重定向到不带public的URL吗?我尝试过这样做:RewriteRule^public/(.*)$/$1[R=301,L]
,但它不起作用。因为我们将所有内容路由到/public,所以在上面的代码指定URL之前,您必须先指定URL,这样它才能正确找到路由。在公用文件夹中,创建一个新的htaccess,并在RewriteRule ^public/(.+)$[R=301,L]上添加此代码重写引擎,将url替换为您自己的url
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]