使用.htaccess重写动态URL

时间:2013-07-25 11:32:50

标签: .htaccess

将网站从IIS迁移到Apache,我在使用RewriteRule时遇到问题我无法找到答案。

我需要从www.domain.com/pubs/books/P123.asp重定向到www.domain.com/books.php?p=P123

无论我尝试什么,我都会得到404.

有人可以给我指针吗?我似乎发现的所有示例都在最后有动态部分的URL。我首先需要剥离.asp吗?

Drupal也在这个网站上运行,因此有一些RewriteRules。

我尝试过的最新消息是:RewriteRule /pubs/books/P(.*)$.asp /books.php?p=$1

1 个答案:

答案 0 :(得分:0)

首先:阅读文档!你可以找到它here

它说:

  

Syntax: RewriteRule Pattern Substitution [flags]

  

在VirtualHost上下文中,最初将匹配模式   主机名和端口之后以及查询之前的URL部分   字符串(例如“/app1/index.html”)。

     

在目录和htaccess上下文中,   Pattern最初将与文件系统路径匹配,   删除导致服务器到当前的前缀   RewriteRule(例如“app1 / index.html”或“index.html”取决于where   指令已定义。)

     

如果你想与之匹敌   主机名,端口或查询字符串,使用RewriteCond   %{HTTP_HOST},%{SERVER_PORT}或%{QUERY_STRING}个变量   分别

(换句话说:如果在.htaccess上下文中,以斜杠开头的模式永远不会匹配)


首先,确保启用mod_rewrite并启用rewriteengine(将RewriteEngine on放入.htaccess中)并允许其中(参见文档)。

假设这是在你的www-root中的.htaccess,这应该有效:

RewriteRule ^pubs/books/P(.*)\.asp$ books.php?p=$1 [L]

语法^...$确保这是整个文件系统路径。我们不希望在这里匹配http://example.com/some/more/paths/pubs/books/P123.asp并重写它。

相关问题