htaccess RewriteRule - 从 URL 中删除“/”会导致请求显示在 URL 中

htaccess RewriteRule - Removing '/' From The URL Causes Request To Display In URL

关于 .htaccess 我有一个小问题。

问题更多在于美学而不是功能。 我有一个非常小的 htaccess 文件,其中仅包含以下内容:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9\/\-]*)$ index.php?request= [QSA]

这会将任何请求发送到 index.php,在 URI 中进行解析。然后我 manipulate/read URI 来获取相关文件。

一个例子 URL 是这样的: http://localhost/domain/fixtures/2015/

现在,如果我删除结尾的“/”,然后按回车键,URL 将变为: http://localhost/domain/fixtures/2015/?request=fixtures/2015

我试过在重写中添加一个“/”,但它什么也没做。 我搜索了 Google 无济于事。 (记住我的一些搜索是沿着“/添加到 url htaccess 重写”)

我想要对其进行排序的主要原因是它看起来不漂亮,而且还因为它会创建重复的内容(即您可以从两个 URL 到达同一页面),这是不利于 SEO。

我能指出的任何方向都是很大的帮助。

干杯

如果我没看错,您需要这种形式的外部 URL:

http://localhost/domain/fixtures/2015/

而不是这种形式:

http://localhost/domain/fixtures/2015

为了实现这个,你需要使用重定向让远程 客户知道后一种形式无效,例如,

RewriteEngine On
RewriteCond %{REQUEST_URI} !/$
RewriteRule .* %{REQUEST_URI}/ [R=301,L]

如果您还提供静态内容,您可能也需要这个:

RewriteEngine On
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* %{REQUEST_URI}/ [R=301,L]

所以,包括您的 PHP 内容生成器在内的完整配方:

RewriteEngine On
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* %{REQUEST_URI}/ [R=301,L]
RewriteRule ^([a-zA-Z0-9\/\-]*)$ index.php?request= [QSA]