使用.htaccess重写URL时出现404错误

时间:2014-04-18 00:07:41

标签: .htaccess mod-rewrite url-rewriting url-rewrite-module clean-urls

我正在尝试重写我的网址以获得干净的网址。例如,我希望重写以下URL:

www.domain.com/events/events.php

www.domain.com/events/

正确地重写了URL,但重写的URL出现了404错误。我究竟做错了什么?

我使用以下规则:

RewriteCond %{THE_REQUEST} ^(GET|POST)\ /(.*)/(.*)\.php\ HTTP
RewriteRule ^ http://www.domain.com/%3/? [R=301,L]

1 个答案:

答案 0 :(得分:2)

一旦您获得了外部重定向浏览器的规则,您就需要添加规则到内部重写到实际文件。所以你需要添加:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /$1/$1.php [L]

现在,此规则采用了/(something)//(something)/(something).php的URI。所以:

  • /foo//foo/foo.php
  • /example//example/example.php

您在重写的URI中没有提供其他信息,告诉您php文件名是什么,所以如果您有类似的内容:

  • /foo/bar.php

没有办法提取" bar"超出/foo/。您需要在干净的网址中另外对其进行编码:

RewriteCond %{THE_REQUEST} ^(GET|POST)\ /(.*)/(.*)\.php\ HTTP
RewriteRule ^ http://www.domain.com/%2/%3/? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ /$1/$2.php [L]