Mod_rewrite - 将 .htaccess 更改为 httpd.conf 文件

Mod_rewrite - change .htaccess into httpd.conf file

我有以下 .htaccess 规则,从域中删除 url 中的 .php 扩展名。com/index。php 到域。com/index/工作正常

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteCond %{REQUEST_METHOD} !POST
RewriteRule ^ %1/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ .php [NC,L]

现在我想使用 httpd.conf 文件而不是 .htaccess,但是当我尝试将其重写为:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteCond %{REQUEST_METHOD} !POST
RewriteRule ^ %1/ [R=301,L]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.php -f
RewriteRule ^/(.*?)/?$ .php [NC,L]

url 被正确重写为域.com/index/,但服务器 returns 错误 404.

如果有任何帮助和建议,我会很高兴,可能有什么问题。

如果找到文件或目录,

%{REQUEST_FILENAME} 已经是完整的文件系统路径,因此使用 %{DOCUMENT_ROOT} 作为前缀将生成无效路径。

您可以在 httpd.conf 中使用这些规则:

RewriteEngine On

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteCond %{REQUEST_METHOD} !POST
RewriteRule ^ %1/ [R=301,NE,L]

RewriteCond %{DOCUMENT_ROOT}/ !-d
RewriteCond %{DOCUMENT_ROOT}/.php -f
RewriteRule ^/(.+?)/?$ /.php [L]