如何使用mod_rewrite忽略URL的结尾?

时间:2011-07-12 18:33:53

标签: apache .htaccess mod-rewrite

我想像这样构建我的网站:

domain.com/person/edit/1
domain.com/person/edit/2
domain.com/person/edit/3
etc.

我有一个页面,所有这些请求应该去:

domain.com/person/edit.html

当页面加载时,JavaScript将查看url的尾随部分,因此我希望服务器在内部忽略它。

我有这个重写规则:

RewriteRule ^person/view/(.*)$ person/view.html [L]

我确信我错过了一些明显的东西但是当我访问上面的一个页面时,我收到了这条404消息:

The requested URL /person/view.html/1 was not found on this server.

据我所知,[L]表示如果适用此规则,Apache应停止重写并提供备用页面。相反,似乎是在尽可能早的时候应用规则,然后将剩余的不匹配网址附加到重写的网址上。

如何让这些重写正常工作?

1 个答案:

答案 0 :(得分:3)

“据我所知,[L]表示如果适用此规则,Apache应停止重写并提供备用页面。”

嗯.. [L]标志告诉Apache停止检查其他规则..并重写进入下一次迭代..再次检查所有规则(这就是它的工作方式)。

尝试这些“食谱”(把它放在.htaccess的顶部):

Options +FollowSymLinks -MultiViews

# activate rewrite engine
RewriteEngine On

# Do not do anything for already existing files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]

尝试的另一个想法 - 向DPI添加[L]标记:[L,DPI]


如果Options无效,则应重写规则。但这一切都取决于你的Apache的配置。如果以上不起作用 - 请发布您的整个.htaccess(更新您的问题)。