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

时间:2016-09-08 21:45:09

标签: apache .htaccess mod-rewrite httpd.conf

我遵循.htaccess规则,将域名链接中的.php扩展名从domain.com/index.php删除到domain.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 ^(.*?)/?$ $1.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 ^/(.*?)/?$ $1.php [NC,L]

url被正确重写为domain.com/index/,但服务器返回错误404。

我很乐意提供任何帮助和建议,这可能是错误的。

1 个答案:

答案 0 :(得分:1)

如果找到文件或目录,则

%{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}/$1 !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^/(.+?)/?$ /$1.php [L]