在 HTTPD.CONF 文件中使用 Mod_Rewrite

Posted

技术标签:

【中文标题】在 HTTPD.CONF 文件中使用 Mod_Rewrite【英文标题】:Using Mod_Rewrite in HTTPD.CONF file 【发布时间】:2013-10-30 05:15:34 【问题描述】:

我想重写 URL,以便用户访问时;

http://www.example.com/applications/newWeb/www/index.php?page=48&thiscontent=2660&date=2013-10-11&pubType=0&PublishTime=09:30:00&from=home&tabOption=1

如果 URL 包含 thiscontent=2660(在上面的示例中确实如此)我想将它们重定向到;

http://www.example.come/index.php/publications/finance-and-economics/departmental-resources

我有大约 30 种不同的 thiscontent=XXXX 类型,假设我将不得不复制和编辑这条规则 30 次不同的时间,以便我的旧网站的任何链接仍然存在。

我可以访问我的 httpd.conf 文件,但之前从未做过 mod_rewrite。

我也不需要这些在错误日志中显示为 301。那会发生吗?因为目前有数百个!

【问题讨论】:

【参考方案1】:

首先,您需要确保 mod_rewrite 已加载。这行应该在你的 httpd.conf 中取消注释:

LoadModule rewrite_module modules/mod_rewrite.so

那么你可以使用这些规则:

RewriteEngine On
RewriteCond %QUERY_STRING (^|&)thiscontent=2660(&|$)
RewriteRule ^/?applications/newWeb/www/index\.php$ http://www.example.come/index.php/publications/finance-and-economics/departmental-resources? [L,R=301]

是的,您需要专门设置每一个,因此您需要其中的 30 个(但只需要一次 RewriteEngine On。您还可以将这些规则放在文档根目录的 htaccess 文件中。

【讨论】:

+1 乔恩。如果目标 URL 相同,我建议您建议 OP 使用 thiscontent=(2660|1234|..) 以避免重复规则。 你能扩展(^|&)(&|$)的语法吗?或者告诉我这叫什么,这样我就可以查找并学习它?我以前没用过.. @MikeLovely (<something>|<something else) 意味着一件事或另一件事。 (^|&) 表示字符串的开头或&,而(&|$) 表示& 或字符串的结尾。 我是否必须将我的重写规则包装在 <IfModule mod_rewrite.c> 块中? @MikeLovely 不,只有当你想将你的东西移植到另一个没有加载 mod_rewrite 的服务器时

以上是关于在 HTTPD.CONF 文件中使用 Mod_Rewrite的主要内容,如果未能解决你的问题,请参考以下文章

在 HTTPD.CONF 文件中使用 Mod_Rewrite

共享 httpd.conf

如何使用自定义 httpd.conf 文件创建 Apache 服务

Apache的主配置文件:/etc/httpd/conf/httpd.conf

Httpd主配置文件httpd.conf 详解

导入/包含要在 Apache 的 httpd.conf 中使用的外部 VirtualHost 文件