WAMP 2.4 上的 Mod_rewrite
Posted
技术标签:
【中文标题】WAMP 2.4 上的 Mod_rewrite【英文标题】:Mod_rewrite on WAMP 2.4 【发布时间】:2014-02-04 18:48:09 【问题描述】:我有 wampserver 2.4,但我似乎无法让 Mod_Rewrite 对其进行处理。我在 Apache 服务中启用了它,并在 httpd.conf 中取消了 mod_rewrite.so 的注释并重新启动了服务器。我还检查了我的 phpinfo(),它在服务下列出了 mod_rewrite。
我正在测试它的站点位于地址 localhost/eb/index.php 后面我试图在 event.php 页面上测试它,其中 url 看起来像 localhost/eb/event.php?id=1
这就是我的 .htaccess 文件在我的 index.php 文件所在的 localhost/eb 根目录中的样子。
<IfModule mod_rewrite.so>
RewriteEngine on
RewriteBase /eb/
RewriteRule ^event/([0-9]+)/?$event.php?id=$1
</IfModule>
即使在此之后它仍然显示 url localhost/eb/event.php?id=1
【问题讨论】:
【参考方案1】:您还需要额外的外部重定向。保持你的 .htaccess 像这样:
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /eb/
RewriteCond %THE_REQUEST /event\.php\?id=([^\s&]+) [NC]
RewriteRule ^ event/%1? [R=301,L]
RewriteRule ^event/([0-9]+)/?$ event.php?id=$1 [L,QSA]
【讨论】:
成功了!能否请您解释一下为什么有这么多规则?我读过的所有教程都只显示了使用 OP 中的重写规则。另外,我现在需要做什么才能让我的 CSS 脚本在已重写的页面上工作?这是一个动态页面,因此 css 调用位于 header.php 中,并且该文件包含在其他页面文件中 对于 css/js 问题,在您的 css、js、图像文件中使用绝对路径而不是相对路径。这意味着您必须确保这些文件的路径以http://
或斜杠/
开头。或者您可以尝试在页面标题中添加此内容:<base href="/" />
这里需要2条规则。规则 1:将实际的 /eb/event.php?id=123
重定向到 /eb/event/123
和第二条规则,将 /eb/event/123
URI 内部重写为实际的 /eb/event.php?id=123
。【参考方案2】:
在文档根目录而不是 /eb/ 目录上添加 RewriteBase /eb/
,并将所有重写添加到 /eb/ 目录。
更新
在你的 http.conf 上
<Directory *>
# changed from None to FileInfo
AllowOverride FileInfo
</Directory>
【讨论】:
所以在我的 www 根文件夹下,我添加了一个带有AllowOverride All
才能让它工作。以上是关于WAMP 2.4 上的 Mod_rewrite的主要内容,如果未能解决你的问题,请参考以下文章
Flex AMFPHP 站点在 WAMP 2.2 中工作,但在 WAMP 2.4 中失败