我正在使用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。 我在正则表达式中犯了什么错误或其他错误吗?
答案 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
样式文件的解释。
两个一般性说明:
由于它是您的系统,我假设您可以控制http服务器的配置。如果是这样,总是最好在那里放置这样的重写规则(和类似的东西),而不是使用.htaccess
样式文件。这些文件非常容易出错,很难调试,而且真的减慢了服务器的速度。它们仅仅是那些不可以访问http服务器配置的人的最后一个回退。
请注意,如果您决定将规则放在真实服务器配置中,则需要稍微修改规则语法:
.htaccess
您想要使用的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]