3

我想重写我网站上的网址,这样,

  1. www.example.com/login指向www.example.com/login.php

  2. www.example.com/login/也指向www.example.com/login.php

  3. 网站深处的页面应遵循上述规则。IE

    www.example.com/inner/inner2/somethingwww.example.com/inner/inner2/something/也应该指向

    www.example.com/inner/inner2/inner3/something.php

  4. www.example.com/login/anything,如果不存在应该显示 404 (在我的情况下它会导致循环)

我写的规则是:

   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME}\.php -f 
   RewriteRule ^(.*[^/])$ $1.php [L]   
   RewriteRule ^(.+)/$ $1.php [L]

它工作正常,在上述 3 种情况下,但在第 4 种情况下,它会导致循环。

如果请求扩展名为 .php 的文件,我还想显示 404。

而且,如果我使用 REQUEST_URI 而不是 REQUEST_FILENAME,上述规则的行为也会发生变化。两者有什么区别?

TIA

4

1 回答 1

2

试试这个规则来隐藏 php 扩展:

# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ /$1.php [L]
于 2013-10-25T08:24:05.950 回答