htaccess只能在一个文件夹

时间:2016-06-24 08:08:01

标签: php apache .htaccess mod-rewrite

我刚刚开始使用.htaccess,我在这里遇到问题。

在我的public_html文件夹中,我有这些文件。

  • 的index.php
  • profile.php
  • test.php的
  • 的.htaccess

当我去profile.php文件时,我有一些参数。

http://website.com/profile.php?id=1&name=Doe

为了显示更好的搜索引擎优化链接,我试图让它看起来像这样

http://website.com/1/Doe

使用此重写条件

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ profile.php?url=$1 [QSA,L]
</IfModule>

取决于这个答案(click here)

然后在我的php文件中我得到了用户的id所以我可以使用此代码进行查询等

$path_components = explode('/', $_GET['url']);
$ctrl=$path_components[0];

但问题是如果我这样做,我文件夹中的每个文件都试图制作Rewrite Rule,但我想要一个特定的文件...... profile.php

EDiT 1:

所以从下面的评论我做了这个htaccess文件,无论我的服务器上是否启用了mod_rewrite,链接都没有改变。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/profile.php$ [NC]
    RewriteRule ^([^/.]+)/([^/.]+)(?:/)?$ /profile.php?id=$1&name=$2 [L]
</IfModule>

我的php文件现在..

$path_components = explode('/', $_GET['id']);
$ctrl=$path_components[0];

链接

http://website.com/profile.php?id=1&name=Doe

根本没有改变。

2 个答案:

答案 0 :(得分:1)

您需要将旧网址重定向到新网址,将其置于现有规则之上

RewriteEngine on
RewriteCond %{THE_REQUEST} /profile\.php\?id=([0-9]+)&name=(.+)\sHTTP [NC]
RewriteRule ^ /%1/%2? [L,R]
RewriteRule ^([^/]+)/([^/]+)/?$ /profile.php?id=$1&name=$2 [L]

答案 1 :(得分:0)

您好问题很简单:您应该从重写过程中排除现有文件/文件夹。 我建议只有一个index.php页面,您可以在一个地方获得所有请求和处理。无论如何,你的工作htaccess文件应如下所示:

<IfModule mod_rewrite.c>

    RewriteEngine On

    # exclude real folders/files
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    #RewriteRule ^ index.php [L] - # redirect anything to index
    # for your version
    RewriteRule ^(.*)$ profile.php?url=$1 [QSA,L] 
</IfModule>