为什么这个RewriteEngine规则不起作用?

时间:2018-04-29 07:38:34

标签: .htaccess mod-rewrite

我正在尝试了解如何使用.htaccess文件进行网址重写。

到目前为止,我发现的更容易理解的信息是here,我正在努力使其适应我自己的需要,但到目前为止还没有成功。

我有这个网址:

http://www.example.com/contenido.php?id=19

我现在想把它变成:

http://www.example.com/contenido/19

我尝试过:.htaccess文件:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^contenido/([0-9]+) http://www.example.com/contenido.php?id=$1 [NC]

当我尝试清理网址时,我收到“找不到服务器”错误。

非常感谢任何见解。

请注意,我的Apache服务器中RewriteEngine已启用。

2 个答案:

答案 0 :(得分:1)

当您重写目录的所有内容时,没有必要测试页面是否存在。

您可以使用:

Options +FollowSymLinks
RewriteEngine On

# To externally redirect contenido.php?id=nnn to contenido/nnn
RewriteCond %{THE_REQUEST} \s/+contenido\.php\?id=([^\s&]+) [NC]
RewriteRule ^ /contenido/%1 [R=301,L,NE]

# To internally rewrite contenido/nnn to contenido.php?id=nnn
RewriteRule ^contenido/(\d+/?)?$ contenido.php?id=$1 [NC,L]

答案 1 :(得分:0)

this tutorial的一点帮助之后,我找到了解决方案。

以防万一我会在这里发布消息:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^contenido/(\d+)*$ ./contenido.php?id=$1