将 URL 重写为/server/ServerName
from /server/?Server=ServerName
:
RewriteCond %{QUERY_STRING} Server=([^&]+)
RewriteRule "^server/$" "/server/%1/?"
你似乎把这件事搞错了。你应该链接到/server/ServerName
在您的 HTML 源中,因此在内部重写请求from /server/ServerName
to /server/index.php?Server=ServerName
(注意添加index.php
,如评论中所澄清)。/server/index.php?Server=ServerName
是实际处理请求的底层(隐藏)文件路径。
尽管你似乎在最后一行中就已经提到了......
URL 不会重写,但页面会加载。
RewriteRule ^server/([^/\.]+)/?$ /server/?Server=$1? [L]
URL 必须被重写,否则页面将无法加载。对于“重写”到底是什么可能存在一些困惑。这不会更改 URL。你不使用.htaccess
to change网址。您必须在 HTML 源中手动更改 URL - 您要链接到的 URL。
如果您愿意,您可以(可选)稍后实现外部“重定向” - 这确实会更改 URL。但这是only重定向可能链接到旧 URL 或对其建立索引的搜索引擎和第三方。所以,这是为了搜索引擎优化,而不是为了让你的应用程序“工作”。
因此,总而言之,按以下顺序:
- 更改 HTML 源中的 URL,以便链接到表单的 URL
/server/ServerName
.
- (可选)如果您要更改现有 URL 结构,请将任何直接请求重定向到
/server/?Server=ServerName
(or /server/index.php?Server=ServerName
) to /server/ServerName
(规范 URL)。
- 内部重写请求
/server/ServerName
(规范 URL / 您链接到的 URL)到/server/index.php?Server=ServerName
(处理请求的底层文件)。
在根部.htaccess
file:
RewriteEngine On
# (OPTIONAL) For SEO, if changing an existing URL structure...
# Redirect "/server/?Server=ServerName" to "/server/ServerName"
RewriteCond %{QUERY_STRING} ^Server=([^&./]+)(&|$) [NC]
RewriteRule ^server/(index\.php)?$ /server/%1 [NE,R=301,L]
# Rewrite request from "/server/ServerName" to "/server/index.php?Server=ServerName"
RewriteRule ^server/([^/.]+)$ server/index.php?Server=$1 [END]
假设您使用的是 Apache 2.4,以便能够使用END
最后一条规则中的标志。这避免了必须有一个额外的状况在检查直接请求而不是“重写”请求的第一条规则中(以避免重定向循环)。
在第一条规则(“重定向”)中index.php
部分是可选的。这%1
反向引用包含的值Server
前面捕获的URL参数状况. The Server
URL 参数必须非空且不包含点或斜杠(根据您在上一条规则中给出的正则表达式),否则不会重定向或重写。请注意,正则表达式字符类中的文字点不需要反斜杠转义。
请注意,我假设(根据您的示例)所请求的 URL 确实not以尾部斜杠结尾(即/server/ServerName
并不是/server/ServerName/
),所以我删除了可选的/?
在结束时RewriteRule
pattern在最后一条规则中。尽管您的日志摘录似乎另有暗示?如果您确实需要允许尾随斜杠和非尾随斜杠 URL,那么这应该作为单独的“重定向”实现,以便规范化 URL,而不是作为“重写”的一部分,否则会促进重复内容(斜杠和无斜杠 URL 是不同的 URL)。
取决于您期望的值Server
URL参数值,NE
(noescape
) 标志可能是也可能不是必要的。这QUERY_STRING
服务器变量已经是 URL 编码的。
您不需要使用PT
(passthrough
) 中的标志.htaccess
,因为这是此上下文中的默认行为。 (这PT
标志仅在使用 mod_rewrite 时相关server or 虚拟主机语境。)