使用.htaccess,我想将不存在的文件重定向到控制器页面,并重写存在的.php文件扩展名为一个.html扩展名。如果文件存在并且是.html页面,我希望它保持不变。每次我尝试将重写规则从.php注入到.html时,我似乎都搞乱了重定向到控制器页面。所以我不知道该从哪里开始:如果文件存在,则重写扩展名,如果文件不存在则重定向,使用htaccess
Options -Indexes
Options +FollowSymLinks
DirectoryIndex index.php
ErrorDocument 404 /404.php
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ mycontroller.php [L,QSA]
</IfModule>
任何帮助,我将不胜感激。
编辑
我似乎找到了大部分答案here的(但我必须离开了ReweriteBse或者它不工作)。最大的问题是,现在,我现有的.html文件不起作用,它只会提供带有.html扩展名的.php文件,并将其他所有内容指向控制器。现有的.html文件转到我的404页面。我想知道如何保持现有的.html文件不变。我的新代码如下:
RewriteEngine on
RewriteCond %{THE_REQUEST} (.*)\.php
RewriteRule ^(.*)\.php $1.html [R=301,L]
RewriteCond %{THE_REQUEST} (.*)\.html
RewriteRule ^(.*)\.html $1.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ mycontroller.php [L,QSA]
感谢您的快速响应!我把它放进去,现在我得到了“没有指定输入文件”。除了存在的.php文件之外的所有东西(我必须以.php格式输入它们)。 – seaofinformation
好吧,也许我的第五行是造成这个问题,让我想想吧 – Oussama
我应该有资格 - 我正在上传.htaccess不正确。现在我已经正确上传了,但似乎没有任何变化。如果我输入.html,它不会提供相应的.php页面,如果它存在,只会转到404错误。 – seaofinformation