.htaccess 冲突:如何删除 .php 并重写 URL?

.htaccess Conflict: How can I remove .php AND rewrite URLs?

这是我的情况:我有一个目录,我需要在其中重写 URLs,以便可以在 /hello/hello/ 访问 ?page=hello。然后我有一个子目录需要在内部附加 .php 扩展名,因此可以在 /subdir/example/subdir/example/.

访问 /subdir/example.php

我独立开发了网站的两个部分,现在我无法让 htaccess 满足这两个要求。

我当前的 .htaccess 文件是:

RewriteEngine On

# The root directory bit...
Redirect 301 /home /
RewriteEngine On
RewriteCond %{REQUEST_URI} !/subdir
RewriteRule ^([A-Za-z0-9-_/]+)/?$ index.php?page= [L]

# Remove .php
RewriteEngine On
RewriteRule ^(.+)\.php$ / [R,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /.php [NC,END]

这些规则完全独立地工作,即如果我删除另一个,但是一起删除 append.php 但重写规则失败。

我已经尝试制作两个单独的 htaccess 文件,一个用于子目录,一个用于根目录,并使用适当的规则(好的 URL 规则用于根目录,删除 .php 用于subdir), 但这只是意味着附加 .php 不再有效.

有人对此有任何解决方案吗?- 或任何资源可以为我指明正确的方向?我目前正处于 PHP 和 Apache 文档的困境中!

这是有效的方法:

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/.php -f
RewriteRule ^(subdir/.*?)/?$ .php [L,NC]

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

这只会删除 .php 子目录的文件,但总比没有好。