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

.htaccess 重写检查文件的规则,如果找不到,请尝试使用.php扩展名,如果仍然找不到,请进一步重写,.htaccess,mod-rewrite,redirect,.htaccess,Mod Rewrite,Redirect,好的,我在一个站点上有一个目录,其中包含一些文件,比如: faqs.php index.php info.php 如果有人访问我的网站时使用如下url: site.com/faqs 我想让他们得到faqs.php,所以我做了以下一项: RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC] 我还希望在检查.php扩展名后仍找不到的任何文件显示: faqs.php?question=PATH 所以如果他们

好的,我在一个站点上有一个目录,其中包含一些文件,比如:

faqs.php
index.php
info.php
如果有人访问我的网站时使用如下url:

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

在不重定向索引、信息和常见问题解答的情况下,最聪明的方法是什么?

以下内容应该可以让您实现您想要的目标

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

您需要以下两条规则:

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]

我想你的意思是
faqs.php
,而不是
faqs.com
?好的,您可以简单地检查请求文件名加上附加的
.php
是否仍然没有引用现有文件,也许……哦,是的,修复了这个问题。我该如何检查呢?类似于您检查没有扩展名的文件名是否为现有文件的方式…