Apache mod_rewrite显示无效

时间:2016-01-27 18:22:58

标签: apache .htaccess mod-rewrite

我正在使用WAMP,这是Apache 2.4.9的最新版本。我试图使用mod_rewrite美化我的URL,这是我系统中预装的。我在httpd.conf中的#行之前取消注释#:

#LoadModule rewrite_module modules/mod_rewrite.so

成了

LoadModule rewrite_module modules/mod_rewrite.so

重新启动服务器,并在我的.htaccess中编写了以下重写规则:

RewriteEngine on
RewriteRule ^localhost/testmod/(\W+).php$ localhost/testmod/$1

我将它保存在名为testmode的目录中。如果没有修改,此文件夹中名为test.php的文件的URL看起来像:localhost / testmode / test.php,我想从URL中删除.php。

它不会改变任何东西。 URL相同,localhost / testmode / test.php。 我在正则表达式中犯了什么错误或其他错误吗?

2 个答案:

答案 0 :(得分:2)

你必须扭转局面:

HttpClient:SendAsync(HttpRequestMessage requestMessage, ...)

可以这样想:传入请求是RewriteEngine on RewriteRule ^testmod/(\W+)$ testmod/$1.php [L] 字符串必须与正则表达式模式匹配。然后,您在内部映射文件系统中的物理脚本http://localhost/testmod/test

还要确保在http服务器中启用了对此类http://localhost/testmod/test.php样式文件的解释。

两个一般性说明:

  1. 由于它是您的系统,我假设您可以控制http服务器的配置。如果是这样,总是最好在那里放置这样的重写规则(和类似的东西),而不是使用.htaccess样式文件。这些文件非常容易出错,很难调试,而且真的减慢了服务器的速度。它们仅仅是那些可以访问http服务器配置的人的最后一个回退。

    请注意,如果您决定将规则放在真实服务器配置中,则需要稍微修改规则语法:

    .htaccess

  2. 您想要使用的apache模块的文档中回答了您的问题。你真的应该阅读那份文件。它精确,完整,并提供了非常好的例子:http://httpd.apache.org/docs/current/mod/mod_rewrite.html

答案 1 :(得分:1)

如果.htaccess文件夹中有testmod,则这些规则适用于您:

RewriteEngine On
RewriteBase /testmod/

## To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=302,NE,L]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]