0

将站点从 IIS 迁移到 Apache,我在使用 RewriteRule 时遇到了问题,我找不到答案。

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

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

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

Drupal 也在这个站点上运行,所以那里有一些 RewriteRules。

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

4

1 回答 1

0

首先:阅读文档!你可以在这里找到它。

它说:

Syntax: RewriteRule Pattern Substitution [flags]

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

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

如果您希望匹配主机名、端口或查询字符串,请分别使用带有 %{HTTP_HOST}、%{SERVER_PORT} 或 %{QUERY_STRING} 变量的 RewriteCond。

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


首先,确保 mod_rewrite 已启用并且 rewriteengine 已打开(放入RewriteEngine on您的 .htaccess)并允许在那里(请参阅文档)。

假设这是.htaccess在您的 www-root 中,这应该可以工作:

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

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

于 2013-07-25T11:43:07.603 回答