.htaccess重写规则不适用于单个页面

.htaccess重写规则不适用于单个页面,.htaccess,mod-rewrite,redirect,subdomain,.htaccess,Mod Rewrite,Redirect,Subdomain,我有几页: http://waleyqiao.com/about/ http://waleyqiao.com/index/ http://waleyqiao.com/contact/ http://waleyqiao.com/blog/ http://waleyqiao.com/portfolio/ 真正的页面应该是waleyqiao.com/about.html htaccess: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d Re

我有几页:

http://waleyqiao.com/about/
http://waleyqiao.com/index/
http://waleyqiao.com/contact/
http://waleyqiao.com/blog/
http://waleyqiao.com/portfolio/
真正的页面应该是waleyqiao.com/about.html

htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^/]+)/$ $1.html 

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

出于某种原因,waleyqiao.com/portfolio/似乎不起作用,但waleyqiao.com/portfolio.html起作用……

这是因为您将
.html
定位在URI的右端:

/portfolio/.html
这显然是不存在的。您需要创建一个没有尾部斜杠的分组。请尝试以下方法:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1\.html -f
RewriteRule ^ /%1.html 
同样,对于php扩展:

RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1\.php -f
RewriteRule (.*) /%1.php [L]