2011-04-08 81 views

回答

18

在Web根目录下创建.htaccess文件,并输入以下有:

Options +FollowSymLinks 
RewriteEngine on 

RewriteRule ^product/([0-9]+)$ product.php?id=$1 
+0

使用product.php的策略是什么?id = 777&storage = usa – Tuco 2011-04-08 00:42:29

+1

这样只会达到9,因为它没有量词?^product /([0-9] +)$ product.php?id = $ 1 – 2011-04-08 00:47:40

+1

RewriteRule^product /([0-9] +)/ storage /(.*)$ product.php?id = $ 1&storage = $ 2 – 2011-04-08 00:49:33

1

这事做与URL重写,这是你的东西设置通常与mod_rewrite的模块中的Apache

urlrewriting

+0

这应该已发布为评论。 – drudge 2011-04-08 00:21:03

+0

抱歉想帮忙,没有评论尚未有评论。 – FRoZeN 2011-04-08 00:25:16

9

而是使用mod_rewrite你也可以用在你的.htaccess以下内容:

DefaultType application/x-httpd-php 

而只是在服务器上命名您的脚本product(不带.php文件扩展名)。

这样你就可以直接调用,并会接受任何附加的字符串作为$_SERVER["PATH_INFO"]

+0

虽然这样做有一些重要的安全隐患,特别是如果应用程序允许用户上传。如果恶意用户可以上传一个文件并用一个扩展名来命名,而这个扩展名并没有被明确指示为PHP以外的东西,那么他将能够在服务器上执行PHP代码。 – 2011-04-08 03:12:39

+0

确实。我希望安全后果是显而易见的。但以防万一:该设置需要在不需要的子目录中重置。特别是在世界可写的领域。 (无论如何,哪个OTOH不应低于webroot) – mario 2011-04-08 03:16:17

1

这是一件框架,如笨和正如其他人所建议的,Zend可以轻松实现,但仍然可以通过Apache的mod_rewrite完成。基本上,通过.htaccess像这样所有流量引导到一个页面:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

     RewriteCond      %{REQUEST_FILENAME} !-f 
     RewriteCond      %{REQUEST_FILENAME} !-d 
    RewriteRule     ^(.*)$ index.php?_url=$1 [QSA,L] 
</IfModule> 

一旦你在该网页上,你可以分析_url变量,它可以是任何你想要的格式,并适当地处理请求。

+0

不会CodeIgniter/Zend/Symfony /等。所有需要利用mod_rewrite来完成OP正在寻找的内容? – 2011-04-08 14:15:52

+1

是的,我的意思是,如果你只是使用'mod_rewrite',你必须自己完成所有路由,但是默认情况下,所有的路由都具有这种路由,所以你只需启用'mod_rewrite'即可。 – 2011-04-08 14:27:03

+0

好点。感谢澄清。 – 2011-04-08 14:44:08

1

对于我这个代码的工作:

在 “ 的/ etc/apache2的/网站可用/默认” 或 “ 的httpd.conf

你必须有(至少)这些选项

在默认目录

... 
    <Directory /> 
     ... 
     Options FollowSymLinks 
     AllowOverride All 
     ... 
    </Directory> 
... 

或网站特定站点目录

... 
    <Directory "/var/www/my-site"> 
     ... 
     Options FollowSymLinks 
     AllowOverride All 
     ... 
    </Directory> 
... 

并创建(它可能不存在,请确保它可以被apache读取)或编辑站点目录中的“.htaccess”(例如“/var/www/my-site/.htaccess “),并添加以下代码:使用下面的执行文件名为多年

AddType application/x-httpd-php htm html php 
AddHandler application/x-httpd-php .htm .html 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 
+0

如果uri是/hello.world,这个传奇将会失败 – Jacques 2018-01-07 06:03:53

0

我这样做是‘支持’(NOT Support.php,我不想两种方式来访问该文件)。

<Files Support> 
    SetHandler php-script 
</Files> 

不过,我已经开始使用的Plesk作为PHP 7.0执行脚本运行时与这个麻烦。根(.com/index.php)将以PHP 7运行,但我的任何php-script文件(.com/Support)都将作为我的Plesk默认PHP 5.4版本运行。我还没弄清楚为什么会这样做,但它确实解决了设置默认处理程序的问题。