我有以下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>
答案 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/bla
或http://example.com/bla/
并重写服务器。
你可以在你的html中使用它:
<a href="/bla/index.php?id=3">link 3</a>
<form method="post" action="/bla/index.php">
或在脑袋中:
<base href="/bla/">
避免问题