2013-07-20 89 views
0

我想将动态网址www.example.com/business-listing.php?id=7863更改为www.example.com/some-dynamic-text/7863如何使用.htaccess将动态网址更改为SEO友好

而且我想隐藏的所有URL PHP扩展,对于如:网址www.example.com/list/page.php应该改变www.example.com/list/page

而且还当用户输入URL www.example.com/list/page.php,他应该限制访问使用该页面URL。只有使用

我曾尝试以下.htaccess文件允许接取:

DirectoryIndex home.php 
Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^home$ home.php 
RewriteRule ^(.*)\.html$ $1.php [nc] 
RewriteRule ^([a-zA-Z0-9_,-]+)/([a-zA-Z0-9_,-]+)$ business-listing.php?id=$1 
  1. 该采取的第一个正则表达式作为ID的价值,但我想第二次。
  2. 这隐藏了只有home.php的php扩展,但我想要所有的php文件。
  3. 这并不妨碍用户在输入URL时使用PHP扩展名,也就是当用户输入URL www.example.com/bill/pay.php页面打开时,但我想限制它。

回答

0

试试这个代码:

RewriteRule ^$ - [L] 

RewriteCond $1 ^(*\.php) 
RewriteRule ^(.*)$ - [F,L] 

RewriteRule ^/?([^\./]*)[:;,\.]*$ $1.php 

RewriteRule ^list/(.*)$ business-listing.php?id=$1 

如果你想要的网址动态的 '清单' 的一部分,尝试:

RewriteRule ^(.*)/(.*)$ business-listing.php?id=$2 
+0

这是行得通的。但有2个问题:1.隐藏.php扩展名不适用于子目录中的PHP文件。 2.不阻止使用原始URL访问php文件(问题编号:3) –

+0

为什么要阻止访问原始URL? – Pieter

+0

安全原因 –

0
RewriteRule ^(.*)/(.*)$ business-listing.php?id=$2&second=$2 [R,NC,L] 

试试这个!

0

你不应该使用.htaccess。在这种情况下迁移到nginx将会非常痛苦。你也应该记得Front Controller Pattern

URL应该由PHP(python,ryby等)处理。网址路由有许多现成的框架,还有很多很酷的东西,比如数据库API或模板引擎。在php世界中有很多变体。对于我来说,我更喜欢Silex microframeworkSymfony2YiiZend2也值得一看。

例如,硅石,你可以在这样一个不错的方式绑定功能,URL模式:

// web/index.php 

require_once __DIR__.'/../vendor/autoload.php'; 

$app = new Silex\Application(); 

$app->get('/hello/{name}', function ($name) use ($app) { 
    return 'Hello '.$app->escape($name); 
}); 

$app->run(); 

好运。

+0

使用.htacess有什么问题为此目的 –

+0

首先,如果您的网站获得巨大的听觉,您将不得不使用nginx作为apache的前端。 Nginx的配置语法与apache2不同。这就是为什么移民承诺是痛苦的。其次,如果你使用。htaccess,你的应用程序将有多个前端控制器,而不是一个。这可能会导致一些安全问题(导致错误的可能性随着前端控制器数量的增加而增加)。必须有一个操作所有请求的单个脚本(这并不意味着您的所有代码都必须位于单个文件中)。 –

+0

[为什么使用前端控制器](http://www.corej2eepatterns.com/Patterns2ndEd/FrontController.htm)(参见部队) –