.htaccess从站点根目录重定向到公共文件夹,在URL中隐藏“public”?

时间:2014-05-13 15:40:52

标签: php apache .htaccess mod-rewrite redirect

Bellow是我的网站目录结构:

htdocs/
    My-Project/
        public/
            index.php
            css/
            img/
            js/
        src/
            config.php
            templates/
            library/

我不希望任何直接用户访问src目录中的任何文件。 src包含我的模板和后端逻辑脚本。

我想设置.htaccess,以便当用户访问我的网站(根文件夹My-Project)时,会将其重定向到My-Project/public/index.php。我希望URL在索引页面上看起来像My-Project.com

有任何帮助吗?我对修改我的.htaccess文件犹豫不决,因为我在这里和网上看到了许多相互矛盾的建议,以及最好的方法。

4 个答案:

答案 0 :(得分:36)

将此代码放在/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]

答案 1 :(得分:8)

将以下内容添加到.htaccess的第一行

DirectoryIndex public/index.php public/index.html

答案 2 :(得分:3)

这一直对我有用。在公用文件夹之外的根目录中创建.htaccess,然后添加这3行内容并解决问题。

RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]

答案 3 :(得分:1)

我对@ anubhava对使用localhost和友好网址的响应进行了一些更改。

目录结构:

  • /(localhost根文件夹)
    • 的myapp /
      • 公共/
      • 的index.php
    • 核/
      • 一些核心文件......

myapp / .htaccess (myapp根文件夹)

RewriteEngine On
RewriteBase /myapp

RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]
RewriteRule ^(.*)$ public/index.php?$1 [L,QSA]

<强>的myapp /公共/ htaccess的

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]

<强>的myapp /公共/ index.php的

<?php
echo 'Hello<br>';
echo $_SERVER['QUERY_STRING'];

有些请求:

http://localhost/myapp/

  

您好

http://localhost/myapp/post/new

  

你好

     

交/新