.htaccess rewrite = 404页面

时间:2013-06-05 16:50:28

标签: php apache .htaccess rewrite

我想例如www.mydomain.com/about.php到www.mydomain.com/about。

基于一些博客阅读,

这是我在httpd.conf上的内容

<Directory "var/www/mydomain">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Allow from all
Order allow, deny
RewriteEngine On
</Directory>

我的.htaccess文件

Order deny,allow
DirectoryIndex index.php

RewriteEngine on

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

www.mydomain.com/about.php仍然可以,但是/ about有404个URL Not Found页面。

上述配置有问题吗?

2 个答案:

答案 0 :(得分:0)

在最后一行中,请尝试:

RewriteRule ^(.*)$     $1.php [L]

(注意^和删除的R = 301)

如果不起作用,请尝试删除.htaccess文件中的所有先前行。仅保留RewriteEngine On

答案 1 :(得分:0)

你的前两个RewriteRules要求在名字后面有一个/作为最后一个字符。您可能想要选择:

RewriteRule ^([^/]+)/?$ $1.php
RewriteRule ^([^/]+)/([^/]+)/?$ /$1/$2.php

这可能就是你在第一个重写组中没有匹配/约的原因。我认为你试图在第二个重写组中做一些不同的事情,但是不清楚是什么(暗示:你正在做什么的一两条评论会非常有用)。