.htaccess mod_rewrite 没有尾部斜线就无法工作
.htaccess mod_rewrite not working without trailing slash
我刚开始使用 htaccess 和 mod_rewrite,所以我刚刚设法让我的功能正常运行,将我的 GET 页面变量重写为示例。com/page_name/
但是,这需要在它之后添加一个 /,我知道它已明确添加到重写中,但如果我删除它,则会收到 500 错误并且我尝试添加一个 ?在它之后,根据我在网上找到的资源,这将使它成为可选的,但是,它再次给我一个 500 错误,还有更好的写法吗?
RewriteEngine On
RewriteRule ^([^/]*)\/$ /?page= [L]
斜杠被转义了,所以如果你想去掉尾随的斜杠,你也必须去掉反斜杠。
RewriteEngine On
RewriteRule ^([^\/]*)$ /?page= [L]
如果你想让尾部斜线可选,试试这个:
RewriteEngine On
RewriteRule ^([^\/]*)\/?$ /?page= [L]
您收到 500 错误,因为您创建了一个无限循环。
解释:(当尾部斜杠可选时)
domain.com/page_name/
被重写为 /?page=page_name
/?page=page_name
表示 /index.php?page=page_name
- 但是现在你的规则也匹配
index.php
- --> 循环
要避免它,您可以改用此代码
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /?page= [L]
此代码在重写之前检查请求 URI 是否不存在 file/folder。
如果您不将尾部斜杠设为可选,则您的规则只能达到 的效果。
RewriteRule ^([^/]+)/$ /?page= [L]
并且这将是一个更好的主意,因为您不会有重复的内容(2 个不同的 url -with/without 尾部斜线 - 提供相同的内容:对搜索引擎不好)。
结论:选择一种格式,但不能同时选择两种格式。如果您选择 without trailing slash
格式,那么您可以使用我的第一部分代码(您可以删除 ?
)。否则,你可以选择我的第二个(看起来和你的几乎一样的那个)。
注意:您不需要使用 mod_rewrite
转义 /
我刚开始使用 htaccess 和 mod_rewrite,所以我刚刚设法让我的功能正常运行,将我的 GET 页面变量重写为示例。com/page_name/
但是,这需要在它之后添加一个 /,我知道它已明确添加到重写中,但如果我删除它,则会收到 500 错误并且我尝试添加一个 ?在它之后,根据我在网上找到的资源,这将使它成为可选的,但是,它再次给我一个 500 错误,还有更好的写法吗?
RewriteEngine On
RewriteRule ^([^/]*)\/$ /?page= [L]
斜杠被转义了,所以如果你想去掉尾随的斜杠,你也必须去掉反斜杠。
RewriteEngine On
RewriteRule ^([^\/]*)$ /?page= [L]
如果你想让尾部斜线可选,试试这个:
RewriteEngine On
RewriteRule ^([^\/]*)\/?$ /?page= [L]
您收到 500 错误,因为您创建了一个无限循环。
解释:(当尾部斜杠可选时)
domain.com/page_name/
被重写为/?page=page_name
/?page=page_name
表示/index.php?page=page_name
- 但是现在你的规则也匹配
index.php
- --> 循环
要避免它,您可以改用此代码
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /?page= [L]
此代码在重写之前检查请求 URI 是否不存在 file/folder。
如果您不将尾部斜杠设为可选,则您的规则只能达到 的效果。
RewriteRule ^([^/]+)/$ /?page= [L]
并且这将是一个更好的主意,因为您不会有重复的内容(2 个不同的 url -with/without 尾部斜线 - 提供相同的内容:对搜索引擎不好)。
结论:选择一种格式,但不能同时选择两种格式。如果您选择 without trailing slash
格式,那么您可以使用我的第一部分代码(您可以删除 ?
)。否则,你可以选择我的第二个(看起来和你的几乎一样的那个)。
注意:您不需要使用 mod_rewrite
转义/