多个参数不起作用的htaccess,?

时间:2015-03-25 02:41:56

标签: php apache .htaccess mod-rewrite url-rewriting

我正在尝试使用htaccess文件来重写网址,我真的没有这方面的经验,我所做的一切都是在这里和谷歌搜索。我的链接中包含查询参数。我将所有内容发送到index.php页面。

我在尝试重写它们之前测试了所有链接,它们都在索引页面中工作。所以我创建了一个htaccess文件来重写链接,但我得到的只是一个空白页面,没有任何变量被发送到索引页面。我在index.php页面中使用$ _GET来检索变量。

以下是我尝试重写的链接类型列表以及我的实际htaccess文件的副本,还有mod rewrte已打开并在apache中正常运行。请帮我改变我的htaccess文件,根据我在下面显示的示例链接,确切地完成我想要的内容,好吗?

目录重写很好并且相应地工作,它是没有的链接。

另外,如果您注意到链接#1 #2 ,则页面参数不会也不应出现在这两个链接的重写链接,但仍然会向我的index.php发送空白或空字符串。

例如 -

<?php

$page= $_GET['page'];
$user= $_GET['user'];
$act= $_GET['act'];
$section= $_GET['section'];
$search= $_GET['search']
$xx= $_GET['xx'];

if($page == ''){
   //Do some code
}elseif($page == 'search'){
   //Do some code
?>

重写这些类型的链接

注意 - “ http:// ”是所有这些链接的前面,堆栈溢出不会让我添加它并发布。


LINK#1

本地主机/ notetag2 / JohnSmith对/所有/ 1

- REWRITE TO -

本地主机/ notetag2 / index.php页面=安培;用户= JohnSmith对&安培; ACT =所有&安培;节= 1


LINK#2

本地主机/ notetag2 / JohnSmith对/所有

- REWRITE TO -

本地主机/ notetag2 / index.php页面=安培;用户= JohnSmith对&安培; ACT =所有


链接#3

本地主机/ notetag2 /搜索/ JohnSmith对

- REWRITE TO -

本地主机/ notetag2 / index.php页面= SEACH&安培;搜索= JohnSmith对


LINK#4

本地主机/ notetag2 /图片/ 1

- REWRITE TO -

本地主机/ notetag2 / index.php页面=图片&安培;?XX = 1


重写目录

- REWRITE TO -

网络


这是我的实际HTACCESS文件

<IfModule mod_rewrite.c>

    RewriteEngine on
    RewriteBase /notetag2/
    RewriteRule ^index\.php$ - [L]

    RewriteRule ^(.*)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=$1&user=$2&act=$3&section=$4 [L,NC]

    RewriteRule ^(.*)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=$1&user=$2&act=$3 [L,NC]

    RewriteRule ^(.*)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=$1&user=$2 [L,NC]

    RewriteRule ^(.*)/$ notetag2/index.php?page=$1 [L,NC]

    RewriteRule ^search/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=search&q=$1 [L,NC]

    RewriteRule ^pictures/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=picturesh&xx=$1 [L,NC]

    RewriteRule ^([a-zA-Z0-9_-]+)/?$ $1.php [L,NC]


    RewriteRule ^pages/(.*) web/$1 [L]


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* /notetag2/index.php [L,QSA]

</IfModule>

1 个答案:

答案 0 :(得分:0)

您需要修复几个正则表达式。由于您的htaccess文件位于notetag2目录中,因此您不需要与前导&#34; notetag2&#34;匹配。

但首先,你的规则不正确。如果您想与/search/something匹配,则您无法获得与任何匹配的规则,否则它将与/search匹配。所以这些规则需要排在最前面:

RewriteRule ^search/([a-zA-Z0-9_-]+)/?$ index.php?page=search&q=$1 [L,NC]
RewriteRule ^pictures/([a-zA-Z0-9_-]+)/?$ index.php?page=picturesh&xx=$1 [L,NC]

您也不需要您的规则目标中的notetag2/,因为这些规则位于notetag2目录中。

因此,在这两条规则之后,您需要从最大到最小的每个重写:

  

本地主机/ notetag2 / JohnSmith对/所有/ 1

     

- REWRITE TO -

     ?

本地主机/ notetag2 / index.php页面=教程&安培;用户= JohnSmith对&安培; ACT =所有&安培;节= 1

你几乎有这个,只是在正则表达式前面有一些随机(.*)/,这将使它永远不会匹配你想要的。你想要这个:

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=tutorial&user=$1&act=$2&section=$3 [L,NC]

然后是下一个:

  

本地主机/ notetag2 / JohnSmith对/所有

     

- REWRITE TO -

     

本地主机/ notetag2 / index.php页面=教程&安培;用户= JohnSmith对&安培; ACT =所有

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=tutorial&user=$1&act=$2 [L,NC]

&#34;搜索&#34;和&#34;图片&#34;应该由上面的前两条规则处理。

无论你在旧的htaccess文件底部有什么其他规则,他们都需要遵守这些规则。

所以只留下:

  

     

- REWRITE TO -

     

网络

由于这些以notetag2开头,因此您需要将这些规则放在不同的htaccess文件中,即文档根目录中的文件:

RewriteRule ^pages/(.*)$ /web/$1 [L]