重写检查文件的规则,如果没有找到,请尝试使用.php扩展名,如果仍未找到,则进一步重写

时间:2014-03-27 23:17:57

标签: .htaccess mod-rewrite redirect

好的,我在网站上有一个目录,其中有几个文件可以说:

faqs.php
index.php
info.php

如果有人使用以下网址访问我的网站:

site.com/faqs

我希望他们得到faqs.php所以我做其中一个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC]

我还想要在检查.php扩展名后仍然找不到任何文件,以显示:

faqs.php?question=PATH

所以,如果他们出现了:

site.com/what_is_your_problem_anyways

他们会得到:

faqs.php?question=what_is_your_problem_anyways

如果不进行索引,信息和常见问题解答重定向,最明智的方法是什么?

2 个答案:

答案 0 :(得分:0)

以下内容可让您实现自己想要的目标

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*).php$ /faqs.php?question=$1 [R=302,L]

一旦您知道重定向有效,就将R=302更改为R=301

答案 1 :(得分:0)

您需要以下两条规则:

RewriteEngine On

# To internally add .php ext if .hp file is found
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

# if not found then redirect to /faqs.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /faqs.php?question=$1 [QSA,L]