【问题标题】:Rewriting the URL's of 2 subfolders in a /public (root document) folder重写 /public(根文档)文件夹中 2 个子文件夹的 URL
【发布时间】:2019-08-14 06:48:03
【问题描述】:

目前我有一个“公共”文件夹作为我所有前端代码所在的根目录。

但由于我的公用文件夹包含网站内容和应用程序内容,我想将其进一步拆分。 所以我的想法是:

.htaccess (rewriting public url)
src (php backend code)
public/
  web/
    index.php
  app/
    account.php

所以我的问题是,我可以轻松访问这样的页面:
http://example.com/web/index.php
http://example.com/app/account.php

但我想从 URL 中删除“web”和“app”...
http://example.com/index.php
http://example.com/account.php

如何使用 .htaccess 做到这一点?我正在运行 apache 2.4。

编辑
我尝试过的一个例子:

RewriteEngine On
RewriteCond %{REQUEST_URI} !app/
RewriteRule (.*) /app/$1
RewriteCond %{REQUEST_URI} !web/
RewriteRule (.*) /web/$1

【问题讨论】:

    标签: php apache .htaccess apache2.4


    【解决方案1】:

    您可能需要调整您的请求。但第一种方法是:

    首先,确保您启用了 mod 重写。 二、在.htaccess中写入如下

    RewriteEngine On
    RewriteRule ^[/]?index.php$ /web/index.php [NS,NC,L]
    RewriteRule ^[/]?account.php$ /app/account.php [NS,NC,L]
    

    您需要阅读文档以制定其他规则。你可以在这里阅读它 https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

    还要特别注意标志。阅读文档以设置适用于您情况的文档。

    【讨论】:

    • 感谢您的回复。我需要一个更具动态性的解决方案,因此无需像您那样实际键入特定文件。这可能吗?
    • 当然可以。重写规则使用正则表达式。这是有史以来最具活力的系统。所有信息都在文档中。如果您需要具体答案,请发布具体问题。
    • 我现在尝试了很多不同的东西,这就是我在这里问的原因。我已经用我尝试过的示例更新了我的答案,但仍然无法正常工作。
    • 问题是你应用的逻辑。我的意思是,服务器需要一种模式来了解要更改的内容。因此,如果服务器将接收 /account,php 很容易转换为 /app/account.php。但是,如果服务器从这两种条目中获得的内容没有区别,那么最好创建一个不同的子域。比如 app.example.com 和 www.example.com。然后,当您在 app.example.com 中有内容时,您将其重写为 example.com/app。所以你需要的是一种区分这两个调用的方法
    • 我想到的另一个想法是在您的应用程序中添加一个 GET 参数。因此,您可以使用 QUERY_STRING 和正则表达式来识别它,如果有,则将其发送到 /app。如果没有,请将其发送到 /web ...
    【解决方案2】:

    我现在尝试了很多不同的东西,但我终于弄明白了

    RewriteEngine on
    RewriteBase /
    # Rewrite every web request
    RewriteCond         "%{DOCUMENT_ROOT}/web/%{REQUEST_URI}"  -f
    RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/web/$1"
    
    # Rewrite every app request
    RewriteCond         "%{DOCUMENT_ROOT}/app/%{REQUEST_URI}"  -f
    RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/app/$1"
    
    # Remove .php extension
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^\.]+)$ $1.php [NC,L]
    

    这在进行设置时有效:

    public/ (root folder)<br>
       web/ (contains website frontend)<br>
       app/ (contains app frontend)<br>
       .htaccess (contains the code above)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 2015-09-22
      相关资源
      最近更新 更多