簡體   English   中英

Apache Mod-Rewrite問題

[英]Apache Mod-Rewrite Question

我在名為blog的文件夾中有一個名為index.php的PHP腳本。 有三種不同的觀點。

  1. http://www.myDomain.com/blog/index.php
  2. http://www.myDomain.com/blog/index.php?tags=類別列表
  3. http://www.myDomain.com/blog/index.php?post=帖子名稱

我想根據URL更改視圖。

  1. / blog重定向到上面的數字1
  2. / blog /類別名稱重定向到上面的數字2
  3. / blog /類別名稱/帖子名稱重定向到上面的數字3。

現在,我有以下mod_rewrite規則。

RewriteRule ^blog$ blog/index.php [L]
RewriteRule ^blog/(.+)/(.+)$ blog/index.php?post=$2 [L]
RewriteRule ^blog/(.+)$ blog/index.php?tags=$1 [L]

這不起作用,我不確定為什么。 現在,它總是重定向到最后一個URL:

blog/index.php?tags=$1

GET數據包含“ index.php”。

另外,如果在最終規則中添加正斜杠,如下所示:

RewriteRule ^blog/(.+)/$ blog/index.php?tags=$1 [L]

所有重定向工作正常。 問題是,我需要有在URL的結尾斜杠,如果我想在分類視圖。

有什么想法嗎? 我該如何解決?


感謝您的答復。 我發現我的問題是將腳本放在名為“ blog”的文件夾中的副作用。 這是index.php的樣子:

<?php

define ('BASE_PATH', "../blog/");

include_once(BASE_PATH . 'controller/Controller.php');

$controller = new Controller();
$controller->invoke();

看到問題了嗎? 因為我腳本的基本路徑是“博客”,所以mod_rewrite正在重寫程序中的所有引用。 通過將我的腳本文件夾重命名為blogScript,它解決了該問題。

在正則表達式中, . 匹配任何字符(包括/字符),因此請嘗試執行^blog/([^/]+)$來匹配/以外的任何字符。

您可以編寫如下。

RewriteRule ^blog/?$ blog/index.php [L]
RewriteRule ^blog/(.+?)/(.+?)/?$ blog/index.php?post=$2 [L]
RewriteRule ^blog/(.+?)/?$ blog/index.php?tags=$1 [L]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM