0

我已经搜索了很多来完成这项工作。我发现了许多人们声称正在工作的解决方案。

但这对我不起作用。我不知道为什么会这样。

下面是我现在的 .htaccess。前 4 行代码工作正常,其余的则不行。

另外,我是否还需要更改导航中的链接?

网站请点击这里

代码

Options Includes FollowSymLinks

RewriteEngine On

RewriteCond %{HTTP_HOST} !^dylanvanheugten.nl$ [NC]
RewriteRule ^(.*)$  http://dylanvanheugten.nl/$1 [R=301]

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

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

谁能帮我修复我的文件?

提前致谢!

最后一件事,请解释你在做什么。;-)

4

1 回答 1

1

这个条件:

RewriteCond %{REQUEST_FILENAME}\.php -f

会失败,因为你有一个斜杠。例如,如果您请求/foo/bar/期望在 处获得内容/foo/bar.php,则尾部斜杠将使此条件检查是否/foo/bar/.php作为文件存在,而事实并非如此。

您需要调整检查以忽略尾部斜杠:

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

您缺少的另一件事是对 php 文件的请求的外部重定向:

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /([^/]+)\.php
RewriteRule ^ /%2/ [L,R=301]
于 2013-08-20T15:15:55.303 回答