在 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 文件创建 Apache 服务