如何使用.htaccess将动态URL更改为SEO友好

时间:2013-07-20 11:33:04

标签: php .htaccess url-rewriting

我想将动态网址www.example.com/business-listing.php?id=7863更改为www.example.com/some-dynamic-text/7863

此外,我想隐藏所有网址的.php扩展名,例如:网址www.example.com/list/page.php应更改为www.example.com/list/page

此外,当用户输入网址www.example.com/list/page.php时,他应该限制使用该网址访问该网页。仅允许使用

进行访问
www.example.com/list/page

我尝试了以下.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. 这不会阻止用户在输入带有PHP扩展名的URL时,也就是当用户输入网页www.example.com/bill/pay.php页面已打开时,但我想限制它。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

试试这个!

答案 2 :(得分:0)

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

URL应由PHP处理(python,ryby等...)。 url路由有很多现成的框架,还有很多很酷的东西,比如数据库api或模板引擎。在php世界中有很多变种。至于我,我更喜欢Silex microframeworkSymfony2YiiZend2也值得一看。

例如,在silex中,您可以以一种很好的方式将函数绑定到url-pattern:

// 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();
祝你好运。