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

时间:2015-07-29 14:30:57

标签: apache .htaccess mod-rewrite url-rewriting

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

这是计划。我想将网址中的扩展程序(例如' file.html'或' file.php')删除为仅文件名(例如'文件')。我的代码如下:

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

一个扩展说明:此.htcaccess文件位于目录&#39;投资组合中。根有另一个.htcaccess文件,如下所示:

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

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

1 个答案:

答案 0 :(得分:1)

您可以在/portfolio/.htaccess

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

RewriteEngine On
RewriteBase /portfolio/

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

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

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

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