我正在设计一个网站。我希望我的网站地址如下图所示:
我不希望我的网站看起来像http://something.com/profile.php
当有人打开我的网站时,我希望在地址栏中删除.php
个扩展名。换句话说,我希望我的网站像:http://something.com/profile
作为第二个例子,您可以查看StackOverflow网站本身。
有人可以帮助我完成这项工作吗?谢谢!
答案 0 :(得分:72)
只需将.htaccess文件添加到您网站的根文件夹(例如/home/domains/domain.com/htdocs/),其中包含以下内容:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
答案 1 :(得分:13)
首先,验证是否已安装mod_rewrite模块。然后,要小心了解它是如何工作的,很多人都会倒退。
您不会隐藏网址或扩展程序。你所做的是创建一个指向旧网址的新网址,例如
您网站上的网址为yoursite.com/play?m=asdf
或更好
yoursite.com/asdf
即使目录asdf不存在。然后安装mod_rewrite,将其放在.htaccess中。基本上它说,如果请求的URL不是文件而不是目录,请将其指向我的脚本:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /play.php [L]
差不多完成了 - 现在你只需要在PHP脚本中写一些东西来解析新的URL。你想这样做,以便OLD也可以工作 - 你所做的是维护一个系统,变量总是完全相同 OR 创建一个数据库表,将“SEO友好URL”与产品ID。一个例子可能是
/ Some-Cool-Video(等于产品ID asdf)
这样做的好处是什么?搜索引擎会将关键词“Some Cool Video”编入索引。 ASDF?谁会去搜索?
我不能告诉你如何编程这个,但是拿出查询字符串,剥去结束
yoursite.com/Some-Cool-Video
变成“asdf”
然后将m变量设置为此
m = asdf
因此,两个网址仍然会转到同一个产品
yoursite.com/play.php?m=asdf
yoursite.com/Some-Cool-Video
mod_rewrite也可以做很多其他重要的事情,谷歌为它,并在你的服务器上激活它(它可能已经安装。)
答案 2 :(得分:4)
你有不同的选择。 其中一个是创建一个名为“profile”的文件夹,并将“profile.php”重命名为“default.php”并将其放入“profile”文件夹中。 你可以用这种方式命令这个页面:
旧网页:http://something.com/profile.php?id=a&abc=1
新页面:http://something.com/profile/?id=a&abc=1
如果您不满意,请对复杂方法发表评论。
答案 3 :(得分:2)
创建目录并在其中保留index.php的问题是
解决方案是 1. MOD REWRITE(如上所述) 2.使用php代码动态地在索引文件中包含其他文件。在这里阅读更多内容http://inobscuro.com/tutorials/read/16/
答案 4 :(得分:2)
这是我使用的一种简单的PHP方式 如果使用.php扩展名请求页面,则会生成一个没有.php扩展名的新请求。然后,浏览器的地址字段中不再显示.php扩展名。
我提出了这个解决方案,因为很多.htaccess建议都没有对我有用,而且在PHP中实现它比在试图找出.htaccess无法在我的服务器上运行的原因更快。
将它放在每个PHP文件的开头(最好先于其他任何东西):
include_once('scripts.php');
strip_php_extension();
然后将这些函数放在'scripts.php'文件中:
//==== Strip .php extension from requested URI
function strip_php_extension()
{
$uri = $_SERVER['REQUEST_URI'];
$ext = substr(strrchr($uri, '.'), 1);
if ($ext == 'php')
{
$url = substr($uri, 0, strrpos($uri, '.'));
redirect($url);
}
}
//==== Redirect. Try PHP header redirect, then Java, then http redirect
function redirect($url)
{
if (!headers_sent())
{
/* If headers not yet sent => do php redirect */
header('Location: '.$url);
exit;
}
else
{
/* If headers already sent => do javaScript redirect */
echo '<script type="text/javascript">';
echo 'window.location.href="'.$url.'";';
echo '</script>';
/* If javaScript is disabled => do html redirect */
echo '<noscript>';
echo '<meta http-equiv="refresh" content="0; url='.$url.'" />';
echo '</noscript>';
exit;
}
}
显然,您仍然需要设置Apache以将没有扩展名的任何请求重定向到具有扩展名的文件。 上面的解决方案只是检查请求的URI是否有扩展名,如果它请求没有扩展名的URI。然后Apache使用扩展名重定向到文件,但只有请求的URI(没有扩展名)显示在浏览器的地址字段中。 优点是代码中的所有“href”链接仍然可以具有完整的文件名,即包括.php扩展名。
答案 5 :(得分:1)
实际上,操纵这个的最简单方法是
然后网址www.yoursite.com/data将读取index.php文件。如果你想进一步,打开一个子文件夹(例如“List”),在该文件夹中放入另一个index.php,你可以让www.yoursite.com/data/list运行该PHP文件。
通过这种方式,您可以完全控制这一点,对SEO非常有用。
答案 6 :(得分:1)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
答案 7 :(得分:1)
通过.htaccess删除文件扩展名
原始网址:http://ravinderrathore.herobo.com/contact.php
htaccess规则从网址中删除.php,.html等文件扩展名。
RewriteRule ^(.*)$ $1.php
After Rewriting: http://ravinderrathore.herobo.com/contact
RewriteEngine on
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^index(.*)?$ index.php$1 [L,QSA]
RewriteRule ^login_success(/)?$ login_success.php [L,QSA]
RewriteRule ^contact(/)?$ contact.php [L,QSA]
答案 8 :(得分:1)
Tony,你的脚本没问题,但如果你有100个文件?需要在所有这些中添加此代码:
include_once( 'scripts.php');
strip_php_extension();
我认为你在每个php文件中都包含一个菜单(可能你的菜单显示在你的所有网页中),所以你只能在菜单文件中添加这两行代码。这项工作对我来说:D
答案 9 :(得分:0)
与第一个答案几乎相同,但更有优势。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
如果您的网站中有其他文件扩展名,只需加起来
答案 10 :(得分:0)
对于那些仍在寻找简单答案的人;您可以使用.htaccess
删除文件扩展名,但是这种解决方案只是节省了一天的时间。因为当用户从地址栏中复制URL或尝试重新加载甚至从历史回来时,您的标准Apache路由器将无法意识到您要查找的内容并抛出404 Error
。为此,您需要一个专用的路由器,以通过说服务器和文件系统不知道的内容来使您的应用了解URL的实际含义。
我在这里留出我的解决方案。我的客户和我的项目都经过多次测试和使用。它也支持多种语言和语言检测。建议使用自述文件。它还为您提供了一个良好的结构,使您的项目整洁,其中包含不同的语言文件(每种语言甚至可以有不同的设计),并且css
,js
和php
文件的分隔更像images
或其他任何东西。