我正在使用以下代码从URL中删除.php
扩展:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}'.php -f
RewriteRule ^(.*)$ $1.php
我的问题是如何像堆栈溢出一样将其删除。如果我的URL是domain.com/about.php
,它会重定向到domain.com/about
,但如果有人故意在about
之后键入.php
,它会保留在那里。此外,如果有人直接访问domain.com/about.php
,它仍然保留在那里。即使用户有意键入,我如何才能像stackoverflow那样从URL中删除任何扩展?如果这在.htacess
中无法完成,我可以用JavaScript或PHP完成吗?
尝试:
RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.]+)'.php [NC]
RewriteRule ^ %1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}'.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
这将重定向
http://example.com/file.php
至
http://example.com/file
然后重写:
http://example.com/file
至
http://example.com/file.php
使用Apache Web服务器时为干净URL进行魔术重写:
这个过程包括几个步骤。你应该觉得自己像个忍者,因为你想这样做,并付出额外的努力。这是值得的!
将.htaccess文件放在您正在工作的文件夹中:(例如,如果您在目录
/company/
中工作,则将其放在/company/.htaccess
中)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L,QSA]
因此,我们现在在您的服务器上有了一个路径,如果它不存在,它将接受其中的任何内容。例如,如果你指向/company/Joe_Plumber
,它会重定向到index.php。如果你指向了/company/style.css
,并且它存在并且具有正确的权限,它会给你想要的文件。
在该目录中创建一个index.php文件(例如
/company/index.php
)
现在,在php文件中,您必须处理用户的请求。Basename只会给你最后一个文件夹,所以如果我们请求/company/foo/bar
,它只会得到bar
$q = basename($_SERVER['REQUEST_URI']);
$q = str_replace('_',' ',$q); // Convert any underscores to spaces
echo "Hi, {$q}!";
仅此而已。如果有什么我可以澄清或帮助的方法,请询问。