处理htaccess中的尾部斜杠

时间:2016-04-22 12:24:21

标签: apache .htaccess mod-rewrite

mod_rewrite上有相当多的内容,但我还没有能够让以下工作。

现在我的htaccess文件中有以下代码:

RewriteEngine On
Options -Indexes
Options -Multiviews
ErrorDocument 400 http://localhost/mywebsite/400.php
ErrorDocument 403 http://localhost/mywebsite/403.php
ErrorDocument 404 http://localhost/mywebsite/404.php
ErrorDocument 500 http://localhost/mywebsite/500.php

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]

哪个会成功地使mywebsite / index工作(而不是mywebsite / index.php)。 但是在某些情况下,我将有访问者使用尾部斜杠(mywebsite / index /)访问该站点,然后我的重写不再起作用。我收到一个错误页面。

那么我将如何使它工作,所以任何带有斜杠,斜杠或扩展名(.php)的页面都可以在我的网站上运行?

我将补充说,这是在apache服务器(XAMPP)上的localhost上,以防这会影响mod_rewrite的工作方式。

3 个答案:

答案 0 :(得分:2)

用以下代码替换您的代码:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ([^/]+)/?$ $1.php [L]

答案 1 :(得分:1)

您可以使用:

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

因为如果文件(不带/)存在,你就无法测试。

答案 2 :(得分:0)

像这样的重写规则可以解决这个问题:

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