我正在设计一个网站。我希望我的网站地址如下图所示:
我不希望我的网站看起来像http://something.com/profile.php我想在有人打开我的网站时在地址栏中删除.php
扩展名。换句话说,我希望我的网站像:http://something.com/profile
作为第二个示例,您可以查看StackOverflow网站本身。
有人可以帮助我完成这项工作吗?谢谢!
只需将.htaccess文件添加到您网站的根文件夹(例如/home/domains/domain.com/htdocs/),其中包含以下内容:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
与第一个答案几乎相同,但更多的优势。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
如果您的网站中有其他文件扩展名,请加上即可
首先,验证是否已安装mod_rewrite模块。然后,要小心了解它是如何工作的,很多人都会倒退。
您不隐藏网址或扩展程序。例如,你所做的是创建一个指向旧网址的新网址
放在您网站上的网址为yoursite.com/play?m=asdf
还是更好
your site.com/阿斯顿飞
即使目录asdf不存在。然后安装mod_rewrite,将其放在.htaccess中。基本上它说,如果请求的URL不是文件而不是目录,请将其指向我的脚本:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /play.php [L]
差不多完成了 - 现在你只需要在PHP脚本中写一些东西来解析新的URL。您希望这样做,以便OLD也可以工作 - 您所做的是维护一个系统,通过该系统变量始终完全相同或创建一个数据库表,将“SEO友好URL”与产品ID相关联。一个例子可能是
/ Some-Cool-Video(等于产品ID asdf)
这有什么好处?搜索引擎会将关键词“Some Cool Video”编入索引。 ASDF?谁会去搜索?
我不能给你如何编程的具体细节,但采取查询字符串,剥离结束
yoursite.com/Some-Cool-Video
变成“asdf”
然后将m变量设置为this
米= ASDF
所以这两个URL仍然会转到同一个产品
yoursite.com/play.php?m=asdf
yoursite.com/Some-Cool-Video
mod_rewrite也可以做很多其他重要的事情,谷歌为它,并在你的服务器上激活它(它可能已经安装。)
你有不同的选择。其中一个是创建一个名为“profile”的文件夹,并将“profile.php”重命名为“default.php”并将其放入“profile”文件夹中。并且您可以通过以下方式向此页面发出命令:
旧页面:http://something.com/profile.php?id=a&abc=1
新页面:http://something.com/profile/?id=a&abc=1
如果您不满意,请留下复杂方法的评论。
创建目录并在其中保留index.php的问题是
解决方案是1. MOD REWRITE(如上所述)2。使用php代码动态地在索引文件中包含其他文件。在这里阅读更多信息http://inobscuro.com/tutorials/read/16/
这是我使用的一种简单的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扩展名。
实际上,操纵这个的最简单方法是
然后URL www.yoursite.com/data将读取index.php文件。如果你想进一步,打开一个子文件夹(例如“List”),在该文件夹中放入另一个index.php,你可以让www.yoursite.com/data/list运行该PHP文件。
这样你就可以完全控制它,对SEO非常有用。
与Igor相同,但应该在没有第2行的情况下工作:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
通过.htaccess删除文件扩展名
原始网址:http://ravinderrathore.herobo.com/contact.php
htaccess规则从url中删除.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]
Tony,你的脚本没问题,但如果你有100个文件?需要在所有这些中添加此代码:
include_once( 'scripts.php'); strip_php_extension();
我想你在每个php文件中都包含一个菜单(可能你的菜单显示在你的所有网页中),所以你只能在菜单文件中添加这两行代码。这项工作对我来说:D