我的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]
不起作用,如何将其更改为有效?
答案 0 :(得分:2)
使用此规则:
# add .php file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ $1.php [L,QSA]
在重写
您遇到的主要问题是您的模式:^([A-Za-z]+)$
它将与index
匹配,但不会与test/index
匹配,因为它只允许a-z
个字符。您需要将/
添加到模式中:^([a-z/]+)$
。
因为您有[NC]
标记(无大小写匹配),因此无需同时拥有A-Z
和a-z
我正在使用更多全局/一般模式(.+)
- 它将匹配任何字符,因为它带有“检查文件是否存在”条件,所以无需担心有限的一组字符。
答案 1 :(得分:1)
它不起作用,因为您只匹配字母字母而字符类中没有/
,但您的URI为me/test/index
。试试这个:
RewriteEngine On
RewriteRule ^([A-Za-z/]+)$ $1.php [NC,L,QSA]
此外,由于您使用的是[NC]
,因此您实际上只需要a-z
而不是A-Za-z
,但它不会对任何事情造成伤害。