以下是我的.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1
RewriteRule ^(.*)/$ index.php?url=$1
</IfModule>
我正在尝试使用花哨的推特网址。
www.mywebsite.com/home而不是www.mywebsite.com/home.php
在我的index.php代码中就像这样:
<?php
$key=$_GET['url'];
if($key=='index')
{
include('welcome.php'); // welcome page
}
else if($key=='login')
{
include('login.php'); // Login page
}
else
{
include('index.php'); // go back to index.php
}
?>
这一直给我一个无效的404错误。当我输出时:
echo $key
它显示如下:index.php
而非index
我做错了什么?
答案 0 :(得分:1)
这是你使网友友好的最糟糕的方式,因为如果你有1000页,你必须在“开关”中为他创建一个“案例”。 如果您执行“require_once”作为参数传递$ key,您将遇到一个漏洞,称为LFI(Local File Inclusion)。
我建议您学习或使用REST微框架,如Slim,Respect / Rest,Aura Router等。
寻找宁静的路线。
实施例? Slim Documentation
答案 1 :(得分:0)
如果您正在寻找隐藏.php
扩展程序的.htaccess代码,那么这应该可行:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php[\s?] [NC]
RewriteRule ^ %1 [R=301,L]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]