.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 子目录的文件,但总比没有好。
这是我的情况:我有一个目录,我需要在其中重写 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 子目录的文件,但总比没有好。