首先,我知道当页面不存在时,如何简单地重定向到404
。
ErrorDocument 404 /index.php
我想要做的是物理重定向到索引页面。因此,如果用户键入mydomain.com/abc
并且该页面不存在,则会实际重定向到索引页面。我不希望网址与坏地址保持一致。是的,我知道这不是什么大问题,但它让我烦恼。我可以通过将自定义404页面重定向到主页来完成此操作,但我不想这样做。
我使用[R]
重定向标记尝试了这一点,显然它不起作用。
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]
RewriteRule ^(.*)$ /index.php [L,R]
更新
这是我将其重写为mydomain.com/index.php
我尝试仅使用index.php
删除/
,但它没有重定向,但在下面给出了同样的错误。
The page isn't redirecting properly
Firefox has detected that the server is redirecting the request for this address in a way that will never complete.
This problem can sometimes be caused by disabling or refusing to accept
cookies.
答案 0 :(得分:3)
这样做:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !(?:\.\w+)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([^/]+)/?$ $1.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ / [L,R]
<强>解释强>
检查文件是否有扩展名:
RewriteCond %{REQUEST_URI} !(?:\.\w+)$ [NC]
如果没有,检查文件是否存在:
RewriteCond %{REQUEST_FILENAME} !-f
如果不是文件,请检查它是否是存在的文件夹:
RewriteCond %{REQUEST_FILENAME} !-d
如果没有附加.php
。如果最后有/
,请将其删除并附加.php
RewriteRule ([^/]+)/?$ $1.php
检查附加的.php
或任何扩展文件是否实际上是存在的文件:
RewriteCond %{REQUEST_FILENAME} !-f
检查它是否是目录:
RewriteCond %{REQUEST_FILENAME} !-d
如果没有,那么它是无效的文件请求并将其重定向到/
RewriteRule ^(。*)$ / [L,R]
答案 1 :(得分:0)
这应该是基于mod_rewrite的404处理:
# if it is not a file, directory or link
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ index.php [L,R]
但是我不确定你在第一条规则中做了什么?您是否尝试将.php
添加到每个请求URI?