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的工作方式。
答案 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]