1

我正在使用 .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。

4

2 回答 2

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]

上述规则将:

  1. 如果文件夹存在则不会重定向
  2. 如果文件不存在将不会重定向
  3. 将重定向之前的内容,/如果一个作为文件名存在

所以它适用于所有这些例子:

http://domain.com/about/
http://domain.com/about
http://domain.com/contact/
http://domain.com/contact

如果你愿意,你可以?像注释规则一样删除 ,使其只接受以 . 结尾的 URL /

http://domain.com/about/
http://domain.com/contact/

现在这些是上述工作的重要步骤:

  1. 例如,它必须进入.htaccess您的根文件夹/home/youraccount/public_html/.htaccess
  2. 重写规则之前的选项特别重要-MultiViews
  3. 该文件必须存在于同一位置.htaccess,例如在您的情况下该about.php文件
  4. PHP必须明显工作。
于 2013-09-11T22:16:49.137 回答
0

似乎规则末尾的斜线可能存在,也可能不存在。添加 a?使其成为可选的,因此mysite.com/aboutmysite.com/about/都将匹配。

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-\s]+)/?$ /$1.php

很难说这是导致您的问题的原因,还是其他原因。是否mysite.com/about.php也给你一个错误?

于 2013-09-11T22:07:50.210 回答