mod_rewrite对没有正斜杠的链接的影响?

时间:2015-01-28 00:18:41

标签: php apache .htaccess http mod-rewrite

我有以下VirtualHost和HTML。 VirtualHost的目的是取http://example.com/bla/index.php?id=3并将其重写为http://example.com/index.php?admin=bla&id=3。如果浏览器中的网址为http://example.com/bla/,则表单和链接都会转到http://example.com/bla/index.php。但是如果我在浏览器中放置http://example.com/bla(没有前瞻性斜杠),则帖子会转到http://example.com/bla/index.php,但链接会转到http://example.com/index.php(没有" bla&# 34)。为什么会这样,我该怎么做才能将链接指向http://example.com/bla/index.php

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html
    <Directory "/var/www/html">
        allow from all
        Options +Indexes
        RewriteEngine On
        RewriteBase /

        # If the request is for a valid directory, file, or link, don't do anything
        RewriteCond %{REQUEST_FILENAME} -d [OR]
        RewriteCond %{REQUEST_FILENAME} -f [OR]
        RewriteCond %{REQUEST_FILENAME} -l
        RewriteRule ^ - [L]

        RewriteRule ^([^/]*|[^/]+/(index.php)?)$ /index.php?admin=$1 [L,QSA]
    </Directory>
</VirtualHost>

的index.php

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Links</title>
    </head>
    <body>
        <a href="index.php?id=1">link 1</a>
        <a href="index.php?id=2">link 2</a>
        <a href="index.php?id=3">link 3</a>
        <form method="post">
            <input type="text" name="post_text">
            <input type="submit" value="submit">
        </form>
    </body>
</html>

1 个答案:

答案 0 :(得分:1)

这不是问题或错误。

使用链接浏览器完成工作

http://example.com/bla: 链接index.php
在根文件夹中 - &gt; http://example.com/index.php

http://example.com/bla/: 链接index.php
bla文件夹中 - &gt; http://example.com/bla/index.php

使用表单服务器完成工作

浏览器将表单发送到http://example.com/blahttp://example.com/bla/并重写服务器。

你可以在你的html中使用它:

    <a href="/bla/index.php?id=3">link 3</a>
    <form method="post" action="/bla/index.php">

或在脑袋中:

  <base href="/bla/">

避免问题