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

.htaccess 使用.htacces重写URL时出现404错误,.htaccess,mod-rewrite,url-rewriting,url-rewrite-module,clean-urls,.htaccess,Mod Rewrite,Url Rewriting,Url Rewrite Module,Clean Urls,我正在尝试重写我的URL,使其具有干净的URL。例如,我希望将以下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

我正在尝试重写我的URL,使其具有干净的URL。例如,我希望将以下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]

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /$1/$1.php [L]
现在,这个规则将一个看起来像
/(something)/
的URI转换为
/(something)/(something.php
。因此:

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

在重写的URI中没有其他信息可以告诉您php文件名是什么,因此如果您有类似的信息:

  • /foo/bar.php
无法从
/foo/
中提取“条”。您需要在干净的url中对其进行额外编码:

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]

谢谢你的回答。但是我有一个问题..根据我对重写URL的研究,我认为当你重写URL时,它只会影响URL在浏览器中的显示方式,但在后端它仍在访问原始URL。对吗?如果是这样的话,为什么它会给我404?@AngeloRodriguez不,重写发生在服务器端,当你更改显示的URL时,你会重定向浏览器,浏览器会重新请求新的URL。我使用以下规则,但URL www.nightlinx.com/events/miami不会加载页面内容。重写cond%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-重写规则^events/([^/]+)?$/events/events.php?位置=$1[L]