2

我在运行 XAMPP 的 win8 机器上。我有一个使用 .htaccess 文件设置的虚拟主机目录。我一直在研究如何重写 url,我发现了 RewriteEngine 模块。在我的 httpd.conf apache 文件中,该模块已启用:

LoadModule rewrite_module modules/mod_rewrite.so

似乎下一步是像这样更新我的 .htaccess 文件:

php_value register_globals off
DirectoryIndex default.php index.php
ErrorDocument 404 /filenotfound.html

RewriteEngine On
RewriteBase /
RewriteRule ^Home$ Default.php [L]
RewriteRule ^AboutMe$ About.php [L]
RewriteRule ^Work$ Work.php [L]
RewriteRule ^Blog//Categories$ Blog/Categories.php [L]
RewriteRule ^Blog//([^/.]+)/?$ Blog/Posts.php?val=$1 [L]

我已经关注了几个 SO 问题(配置重写 w/params),但我什至无法让最简单的重写工作。我已经重新启动了 apache 几次,但没有任何结果。

当我在这里时,这是我的文件夹结构,归结为所有相关内容:

root
.htaccess
Blog
   AuthorPanel.php
   Categories.php
   Post.php
   Posts.php
Default.php
About.php
Work.php

这些是我希望实现的重写(我已经尝试了大部分):

site.com/Default.php => site.com/Home
site.com/About.php => site.com/AboutMe

site.com/Blog/Categories.php => site.com/Blog/Categories
site.com/Blog/Posts.php?id=3&val=Android => site.com/Blog/Android
site.com//Blog/Post.php?id=4&title=Working+with+ActionBar => site.com/Blog/Working-with-ActionBar

更新 1在 httpd-vhosts.conf 我什至尝试使用 RewriteEngine on 和 rewrite 规则,但也没有运气:

<VirtualHost *>
  DocumentRoot "C:/Users/ben/Documents/PHP/benWIT"
  ServerName benWIT.local
  <Directory "C:/Users/ben/Documents/PHP/benWIT">
    RewriteEngine on
    Order allow,deny
    AllowOverride all
    Allow from all
    Require all granted
    RewriteRule ^Home$ Default.php [L]
    RewriteRule ^AboutMe$ About.php [L]
    RewriteRule ^Work$ Work.php [L]
  </Directory>
</VirtualHost>
4

1 回答 1

1

由于您使用的是 htaccess,因此您需要确保在 httpd.conf 文件中将 AllowOverride 设置为 All:

AllowOverride All

这将允许您使用 htaccess 文件。话虽如此,作为一般规则,如果您有权访问 apache 配置文件,您不想使用 htaccess 文件或启用 AllowOverride,因为它将使用更多资源来搜索目录并查找 htaccess 文件等。放置更改进入 httpd.conf 文件或 conf.d/example_host.conf 会好很多。

另一个注意事项, mod_rewrite 被过度使用,对于大多数用途来说确实是过度杀伤。我建议您改用 mod_alias (请参阅http://httpd.apache.org/docs/2.2/mod/mod_alias.html)。我应该指出这只能在服务器配置或虚拟主机中使用,因此它不能在 htaccess 文件中使用。但是,如果您可以在两者之间进行选择,则应优先考虑。

Alias /home /default.php
Alias /aboutme /about.php
Alias /work /work.php
AliasMatch /blog//([^/.]+)/? /blog/posts.php?val=$1

.. 等等。

以下是关于何时不使用 mod_rewrite 的好读物: http ://httpd.apache.org/docs/2.2/rewrite/avoid.html

于 2013-08-23T11:33:09.807 回答