我正在尝试重写我的网址以获得干净的网址。例如,我希望重写以下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]
答案 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]