.htaccess - 从非www重定向到www后,显示已删除的.php文件扩展名

时间:2013-11-05 19:27:30

标签: php regex apache .htaccess mod-rewrite

我正在尝试从非www重定向到www url。我已经完成了从文件中删除.php文件扩展名和强制尾随斜杠,但是现在当我从非www重定向到www时,接下来就会发生。

  1. 使用www访问网址时,一切正常,删除扩展程序并添加尾部斜杠。

  2. 从mysite.com重定向时,一切正常,并重定向到www.mysite.com

  3. 但是当我尝试访问网址时

  4.   

    mysite.com/example-page /

    它将我重定向到

      

    www.mysite.com/example-page.php /

    如何从example-page.php中删除.php?

    当前.htaccess代码:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/]+)/$ $1.php
    RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
    RewriteRule (.*)$ /$1/ [R=301,L]
    
    RewriteCond %{HTTP_HOST} !^www.mysite.com$
    RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301]
    

1 个答案:

答案 0 :(得分:1)

尝试此规则:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ [NC]
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]

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

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

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