0

假设我有一个页面 testpage.php 并且我想通过 localhost/testpage 访问它。我无法弄清楚正则表达式让它工作。

当我使用以下内容时,出现服务器错误

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* "^[^0-9][A-z0-9_]+*.php"/$0 

但是,当我指定它工作的确切文件时。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* testpage.php/$0 
4

3 回答 3

3

尝试这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

第三行在进行重写之前检查文件是否确实存在以避免错误

于 2013-03-25T13:17:52.943 回答
1
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php$
RewriteRule ^(.*)$ $1.php [L]

它将用 .php 扩展名重写文件名

于 2013-03-25T13:19:51.393 回答
1

您不能在替换模式中指定正则表达式。这就是它失败的原因。在这一行

RewriteRule .* "^[^0-9][A-z0-9_]+*.php"/$0 

您告诉 Apache 将任何 ( .*) 重写为文字"^[^0-9][A-z0-9_]+*.php"/,加上第零个匹配的字符串(无论如何这是一个错误,因为匹配从 $1 开始,然后是 $2 等)。

如果要捕获匹配项,则必须用括号括起来,例如

(.*)

然后它将在替换字符串中作为$1.

于 2013-03-25T13:22:25.807 回答