我正在使用.htaccess代码删除所有网页的.php扩展名。这是我使用的代码:
RewriteEngine On
RewriteCond /%{REQUEST_FILENAME}.php -f
RewriteRule ^([a-zA-Z0-9_-\s]+)/$ /$1.php
它似乎不起作用。我想我错过了什么。当我输入www.mysite.com/about/来获取www.mysite.com/about.php时,它会返回错误404(找不到页面)。有人可以请一些亮点。
谢谢, 保罗G.
答案 0 :(得分:4)
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
# If folder does not exist
RewriteCond %{REQUEST_FILENAME} !-d
# and file exist
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
# uncomment the below rule if you want the "/" to be required
# otherwise leave as is
# RewriteRule ^([^/]+)/$ $1.php [L]
# internally show the content of filename.php
RewriteRule ^([^/]+)/?$ $1.php [L]
上述规则将:
/
之前的内容(如果存在文件名因此它适用于所有这些例子:
http://domain.com/about/
http://domain.com/about
http://domain.com/contact/
http://domain.com/contact
如果您愿意,可以删除?
,例如注释规则,使其仅接受以/
结尾的网址。
http://domain.com/about/
http://domain.com/contact/
现在这些是上述工作的重要一步:
.htaccess
,例如/home/youraccount/public_html/.htaccess
-MultiViews
.htaccess
所在的同一位置,例如about.php
文件答案 1 :(得分:0)
似乎规则末尾的斜线可能存在,或者可能不存在。添加?
会使其成为可选项,以便mysite.com/about
和mysite.com/about/
都匹配。
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-\s]+)/?$ /$1.php
很难说这是否是导致您的问题的原因,或者是否是其他原因。 mysite.com/about.php
是否也会出错?