1

当前站点是动态的php as a.php。

我希望用户访问我的网站可以使用 a.html,而不是通过原始 a.php。在apache2.x中,在里面设置apache的httpd.conf:

LoadModule rewrite_module modules/mod_rewrite.so
   <Directory "c:/www/xxx">
     rewriteengine on
     rewritebase /
     RewriteRule ^a.html$ a.php
   </ Directory>

上面是最简单的例子。html直接解析成php。现在,问题是:a.php和a.html都可以访问。但是用户访问的默认页面总是a.php。

我想知道上面的设置有错吗?或者除了我在apache中的配置还必须把前台原文件中对应的动态URLs转成静态?如果我们想改变?为了达到“隐藏a.php”的目的?

4

2 回答 2

0

您应该改为在 htaccess 文件中编写重定向规则,并将其放在根目录中。

这是一个可以做的例子(把它放在 .htaccess 文件中并放在根目录下):

RewriteEngine On

#/ rewrite html to php
RewriteRule ^(.*)\.html$ $1.php?redirectLoopStopper=1 [QSA,L]

#/ redirect .php to .html
RewriteCond %{QUERY_STRING} !(redirectLoopStopper=1)
RewriteRule ^(.*)\.php$ PATH/TO/PROJECT/$1.html [R=301,L]
于 2013-03-29T07:42:49.810 回答
0

这是您需要在 .htaccess 中处理此问题的内容:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# To externally redirect /dir/foo.php to /dir/foo.html
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1.html [R=301,L]

# internal forward from abc.html to abc.php
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*)\.html$ /$1.php [NC,L]
于 2013-03-29T12:21:59.963 回答