-1

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

另外我想从所有 URL 中隐藏 .php 扩展名,例如: URLwww.example.com/list/page.php 应该更改为www.example.com/list/page

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

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 时,即当用户输入 URLwww.example.com/bill/pay.php时页面已打开,但我想对其进行限制。
4

3 回答 3

0

试试这个代码:

RewriteRule ^$ - [L]

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

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

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

如果您希望 URL 的“列表”部分是动态的,请尝试:

RewriteRule ^(.*)/(.*)$ business-listing.php?id=$2
于 2013-07-20T12:15:37.797 回答
0
RewriteRule ^(.*)/(.*)$ business-listing.php?id=$2&second=$2 [R,NC,L]

尝试这个!

于 2013-07-20T12:28:10.170 回答
0

您不应该使用 .htaccess 来执行此操作。在这种情况下迁移到 nginx 会非常痛苦。您还应该记住Front Controller Pattern

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

例如,在 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();

祝你好运。

于 2013-07-20T12:30:59.357 回答