0

例如,我想将 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 页面。

上面的配置有问题吗?

4

2 回答 2

0

您的前两个 RewriteRules 要求名称后面有一个 / 作为最后一个字符。您可能希望将其设为可选:

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

这可能是您在第一个重写组中不匹配 /about 的原因。我认为您正在尝试在第二个重写组中做一些不同的事情,但不清楚是什么(提示:对您正在做的事情发表一两条评论会很有帮助)。

于 2013-11-25T15:18:33.960 回答
0

在你的最后一行,尝试:

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

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

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

于 2013-06-05T16:56:58.950 回答