【问题标题】:short URL through htaccess file in php通过 php 中的 htaccess 文件的短 URL
【发布时间】:2021-06-29 07:13:18
【问题描述】:

我有一个网站http://sharenotes.xyz/
在这个网站上,用户可以保存和分享快速笔记给其他用户。
每个笔记都有一个唯一的笔记 ID。 (id 只能包含 [0-9A-Za-z_] 字符)。
网址中存在唯一的笔记 ID http://sharenotes.xyz/hithere
在这种情况下,hithere 是唯一的便笺 ID。
实际上,网址就像 http://sharenotes.xyz/index.php?id=hithere.
我的文件夹结构看起来像 -

并且 index.php 文件存在于公用文件夹中。
.htaccess 文件的内容是什么,以将 url 从 http://sharenotes.xyz/index.php?id=hithere 缩短到 http://sharenotes.xyz/hithere 以及我应该将该 .htaccess 文件放在哪个文件夹中?
我知道 php,但我是 htaccess 文件中的新手(存储在 public_html 文件夹中)。

更新

我忘了告诉你一件事-
有一个名为 public 的文件夹,它为所有用户可访问的文件提供服务。 所以我还通过 .htaccess 文件从 url 中隐藏了 public 的名称。

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^$ public/ [L]
  RewriteRule (.*) public/$1 [L]
</IfModule>
Options -Indexes

这就是为什么你不会在 url 中看到 public。

【问题讨论】:

    标签: php .htaccess


    【解决方案1】:

    这将是必需的重写规则:

    RewriteEngine on
    RewriteRule ^/?([0-9a-zA-Z_]+)/?$ /public/index.php?id=$1 [END]
    

    最好是在实际的 http 服务器的主机配置中实现这样的规则。只有当您无权访问时,您才应该使用分布式配置文件,通常称为“.htaccess”。但这带来了许多缺点。如果您决定使用一个,请将其放在您的主机 DOCUMENT_ROOT 的顶部文件夹中,所以这里是“public_html”文件夹中。

    显然需要将重写模块加载到 apache http 服务器中。如果您使用的是分布式配置文件,那么您还需要为该位置启用此类文件的解释(阅读 http 服务器文档中的 AllowOverride 指令)。

    您很可能需要添加进一步的重写规则来整理对其他资源的请求。


    更新

    考虑到您的 cmets 和您现在添加的用于描述您的实际情况的附加信息,此变体可能与您正在寻找的内容接近:

    RewriteEngine on
    
    RewriteCond /public%{REQUEST_URI} -f [OR]
    RewriteCond /public%{REQUEST_URI} -d
    RewriteRule ^ /public%{REQUEST_URI} [END]
    
    RewriteRule ^/?([0-9a-zA-Z_]+)/?$ /public/index.php?id=$1 [END]
    

    【讨论】:

    • 对不起,我忘了一件事要提。所以请阅读我更新的部分。然后再回答!
    • 所以你需要结合这两个规则,对吧?我相信你会想出来的……
    • 确实如此。这是真的。
    • 上面给你的规则是行不通的。 404 错误,因为浏览器正在寻找文件 hithere(我猜)
    • 上述规则运行良好。但是现在,你的实际情况实际上是不同的,你需要调整它。如前所述:您需要 _combine 两个规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2015-09-10
    相关资源
    最近更新 更多