在 url mod_rewrite 中隐藏扩展名 .php
Posted
技术标签:
【中文标题】在 url mod_rewrite 中隐藏扩展名 .php【英文标题】:hide extension .php in url mod_rewrite 【发布时间】:2011-09-08 15:26:29 【问题描述】:我有一个 php 网站,我正在尝试隐藏扩展。我通过谷歌找到了一些东西,但它们似乎都太复杂了,或者它们将index
重定向到index.php
:就像如果你写name.com/contact
它转到name.com/contact.php
。我不想这样,我只想:
www.name.com/es/index.php to be www.name.com/es/inicio
www.name.com/es/empresa.php to be www.name.com/es/empresa
www.name.com/es/productos.php to be www.name.com/es/productos
www.name.com/es/clientes.php to be www.name.com/es/clientes
www.name.com/es/recetas.php to be www.name.com/es/recetas
www.name.com/es/contacto.php to be www.name.com/es/contacto
www.name.com/en/index.php to be www.name.com/en/home
www.name.com/en/company.php to be www.name.com/en/company
www.name.com/en/products.php to be www.name.com/en/products
www.name.com/en/clients.php to be www.name.com/en/clients
www.name.com/en/recepis.php to be www.name.com/en/recepis
www.name.com/en/contact.php to be www.name.com/en/contact
/en/
文件夹是英文版,/es/
文件夹是西班牙文版
网站内的链接也没有扩展名。
例如,链接到clientes
的图像将是clientes
而不是 clientes.php
和如果有人试图转到/page.php
,它仍然有效但它会重定向到/page
。
【问题讨论】:
这似乎与 ***.com/questions/183921/… 重复 Redirect *.php to clean URL的可能重复 【参考方案1】:RewriteEngine on
Rewritecond %REQUEST_URI !-f Rewritecond %REQUEST_URI !-d Rewritecond %REQUEST_URI !-l RewriteRule ^([\w\d-]+)$ $1.php [L]
RewriteRule ^([^/.]+)$ $1.php [L]
【讨论】:
请尝试描述您的解决方案。【参考方案2】:请在根目录中创建一个 .htaccess 文件并使用此代码!!
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^(.+)$ /$1.php [L,QSA]
希望!!对某人有用!
【讨论】:
【参考方案3】:htacces 文件应如下所示:
RewriteEngine on
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME\.php -f
RewriteRule ^(.*)$ $1.php
您在没有“php”的情况下重定向 url 中具有相同名称的任何 php 文件。 然后在您的 php 文件中,您可以检查 url 是否包含扩展名 (http://blabla.com/bla.php) 并将页面重定向到没有扩展名的相同页面。 所以,在每个 php 文件的开头你应该调用这个函数:
function redirectIfNeeded()
$url = $_SERVER["REQUEST_URI"];
if(preg_match("/\.php/$", $url))
header("Location: ".preg_replace("/\.php/",$url));
【讨论】:
如何将/es/index.php
重写为/es/inicio
?
没关系,我要把index.php改成inicio.php,然后把name.com/es/重定向到name.com/es/inicio
为什么 preg_match 的正则表达式中有美元符号?
$
在正则表达式中记录输入的结尾。例如:/\.php/$
匹配 index.php
但不匹配 index.php5
(因为 php
不是输入的结尾)。更多信息:regular-expressions.info/anchors.html以上是关于在 url mod_rewrite 中隐藏扩展名 .php的主要内容,如果未能解决你的问题,请参考以下文章
ThinkPHP 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php