URL 在 Apache 服务器上重写导致 404 错误页面

URL Rewriting on Apache server causes 404 error page

几周前,我尝试 url 在我的共享主机上重写。它工作了一段时间,但现在它似乎破产了。不知道是什么问题,自己也解决不了。希望你们能帮上忙,伙计们。

这是计划。我想删除 url 中的扩展名(例如 'file.html' 或 'file.php'),仅删除文件名(例如 'file')。我的代码如下:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^index/(.*)/$ index.php?page=
  RewriteRule ^([^\.]+)$ .php [NC,L]
  RewriteRule ^([^\.]+)$ .html [NC,L] 
  ErrorDocument 404 404.php
  ErrorDocument 403 403.php
  ErrorDocument 401 401.php
</IfModule>

一个扩展说明:此 .htcaccess 文件位于目录 'portfolio' 中。根目录有另一个 .htcaccess 文件如下:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase / 
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . index.php [L]
</IfModule>

也许这是显而易见的事情,但我找不到问题所在。我确实在第一个 .htaccess 文件中尝试了 'RewriteBase /website/'、'RewriteBase /'、'RewriteCond %{REQUEST_FILENAME} !-f' 和 'RewriteCond %{REQUEST_FILENAME} !-d',但这不起作用。

您可以在 /portfolio/.htaccess

中使用这些规则
ErrorDocument 404 404.php
ErrorDocument 403 403.php
ErrorDocument 401 401.php

RewriteEngine On
RewriteBase /portfolio/

RewriteRule ^index/(.+?)/$ index.php?page= [L,QSA]

RewriteCond %{DOCUMENT_ROOT}/portfolio/\.html -f [NC]
RewriteRule ^([^.]+)$ .html [L] 

RewriteRule ^([^.]+)$ .php [L]    

您添加.php.html的规则需要有一个RewriteCond来检查您的portfolio目录中是否存在相应的文件。