1

我制作了一个内置 TPL 系统的 PHP 框架。它获取 url 的结尾,并找到包含该字符串的文件。因此,如果 url 是http://website.com/tagHereTpl 系统将查找名为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 错误。

4

1 回答 1

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
于 2013-08-25T21:08:24.337 回答