【问题标题】:Issue with htaccesshtaccess 的问题
【发布时间】:2025-12-24 19:05:13
【问题描述】:

我制作了一个内置 TPL 系统的 PHP 框架。它获取 url 的结尾,并找到包含该字符串的文件。因此,如果 url 是 http://website.com/tagHere,Tpl 系统将查找名为 tagHere.php 的文件。一切正常,但我现在正在尝试扩展框架以具有内置的后端面板。我尝试了多种方法,但它就是拒绝工作。

我决定看看 Wordpress 的 htaccess,因为它们完全符合我的目标。这是他们的 htaccess 的工作原理。

他们检查请求的文件名是否是一个文件。如果它不是一个文件,那么他们检查它是否是一个文件夹。如果它不是文件夹,它们会重定向到 index.php。我希望它检查它是否是一个文件/文件夹,如果不是从URL中删除.php标签,以便TPL系统可以获取指定的文件并返回它。

这是我原来的 .htaccess 文件。

RewriteRule ^(|/)$ index.php?url=$1
RewriteRule ^([a-zA-Z0-9_-]+)(|/)$ index.php?url=$1`

这是 Wordpress 的原始 .htaccess 文件。

<ifmodule mod_rewrite.c="">
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</ifmodule>

这是我的尝试:

<ifmodule mod_rewrite.c="">
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]
RewriteRule ^(|/)$ index.php?url=$1
RewriteRule ^([a-zA-Z0-9_-]+)(|/)$ index.php?url=$1
</ifmodule>

当我尝试上面的 htaccess 时,它返回一个 404 错误。

【问题讨论】:

    标签: php .htaccess templating


    【解决方案1】:

    规则

    RewriteRule . /index.php [L]
    

    将始终匹配每个 URL,因为它会说“如果 URL 中有字符,则重定向”。

    你正在寻找的是这样的:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    RewriteRule ^admin/(.*?)$ admin.php?location=$1 [L]
    RewriteRule ^(|/)$ index.php?url=$1
    RewriteRule ^([a-zA-Z0-9_-]+)(|/)$ index.php?url=$1
    

    【讨论】:

    • 仍然返回 404 错误。不知道为什么......但我确定它是 htaccess,而不是 PHP。
    • 没有你的所有代码很难帮助你。您正在尝试什么 URL,结果应该是什么?
    • 我正在尝试访问这个 ----> intactdev.nu/templating-tags 它应该返回一个 HTML 网页。