mod_rewrite RewriteRule问题

时间:2010-05-25 21:54:37

标签: apache mod-rewrite

我正在使用Apache 2.2和mod_rewrite。我想采取以下网址并将其映射到另一个网址。模式很简单,就像这样:

http://domain/test/ex1.html - > http://domain/app/index.php/content/?name=ex1

我在.htaccess文件中尝试了以下内容(放在docroot的/ test /目录中):

RewriteEngine On
RewriteBase /app/
RewriteRule (.*)\.html index.php/content/?name=$1

RewriteEngine On
RewriteRule (.*)\.html /app/index.php/content/?name=$1

我不确定反向引用是否正确所以设置为$ 0和$ 2但似乎从来没有帮助过。

我也尝试将RewriteLogLevel设置为9.

有一个步骤几乎就在那里: 重写'ex1.html' - > '的index.php /内容/?名称= EX1'

重写日志的最后一行如下: [perdir / var / www / domain / htdocs / test /]使用/app/index.php/content/进行内部重定向[内部重定向]

如何将其重写为/app/index.php/content/?name=ex1?

EDIT 所以在docroot文件中使用它作为.htacces适用于RedirectMatch:

RewriteEngine On 
RewriteBase /
RedirectMatch ^(.*)/(.*)\.html$ http://domain/app/index.php/content/?name=$2
 #this doesnt work - adding to docroot allows for it to pick up but still using test/ex1 rather than just ex1
#RewriteRule ^(.*)\.html$ /app/index.php/content/?name=$1

任何有助于获得最低RewriteRule(目前已被注释掉)的工作将会受到赞赏。

感谢

2 个答案:

答案 0 :(得分:1)

在您的示例中,您提到了domain / test /所以我将基于从/test/*.html重写为/app/index.php/content/?name =

RewriteEngine On
RewriteBase /
RewriteRule ^test/(.*)\.html$ /app/index.php/content/?name=$1

这应该有效。

答案 1 :(得分:0)

嗯,撇下我的头顶:

RewriteCond %{REQUEST_URI} ^/app/(.*)\.html$
RewriteRule ^/app/(.*)\.html$ /app/index.php/content/?name=$1

这假设重写基数为/