mod_rewrite最后一场比赛

时间:2011-07-21 00:53:22

标签: regex .htaccess mod-rewrite

我的htaccess位于localhost/me/.htaccess,我想在最后一个/ .php之后附加任何内容

e.g。 localhost/me/test/index重写为localhost/me/test/index.php

到目前为止,RewriteRule ^([A-Za-z]+)$ $1.php [NC,L]适用于localhost/me/index,但我无法让它适用于那里的第一个例子。为什么^/([A-Za-z]+)$ /$1.php [NC,L]不起作用,如何将其更改为有效?

2 个答案:

答案 0 :(得分:2)

使用此规则:

# add .php file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ $1.php [L,QSA]
  1. 在重写

  2. 之前,它会检查是否存在这样的.php
  3. 您遇到的主要问题是您的模式:^([A-Za-z]+)$它将与index匹配,但不会与test/index匹配,因为它只允许a-z个字符。您需要将/添加到模式中:^([a-z/]+)$

  4. 因为您有[NC]标记(无大小写匹配),因此无需同时拥有A-Za-z

  5. 我正在使用更多全局/一般模式(.+) - 它将匹配任何字符,因为它带有“检查文件是否存在”条件,所以无需担心有限的一组字符。

答案 1 :(得分:1)

它不起作用,因为您只匹配字母字母而字符类中没有/,但您的URI为me/test/index。试试这个:

RewriteEngine On
RewriteRule ^([A-Za-z/]+)$ $1.php [NC,L,QSA]

此外,由于您使用的是[NC],因此您实际上只需要a-z而不是A-Za-z,但它不会对任何事情造成伤害。