【问题标题】:Force trailing slash at end of rewritten query string在重写的查询字符串末尾强制使用斜杠
【发布时间】:2012-04-04 11:58:39
【问题描述】:

这是我的 htaccess 的样子:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^www.site.com$ [NC]
RewriteRule .? http://site.com%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_URI} /page1/([^?].*)$ [NC]
RewriteRule /page1/(.*)$ /page1/?$1 [L] # change /page1/stuff to /page1/?stuff
# End rewriting for page1


RewriteCond %{REQUEST_URI} /page2/([^?].*)$ [NC]
RewriteRule /page2/(.*)$ /page2/?$1
# End rewriting for page2



RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.php\ HTTP/
RewriteRule ^(([^/]+/)*)index\.php$ http://%{HTTP_HOST}/$1 [R=301,NS,L]

Options -Indexes

我还想要的是,如果用户转到site.com/page1/stuffsite.com/page1/stuff/more,它将在地址栏中添加一个斜杠并将其更改为site.com/page1/stuff/site.com/page1/stuff/more/,但我没有尝试过.有什么方法可以做到这一点而不会导致重定向循环?

我希望我的所有网址都有一个尾部斜杠,并且我看到目录已经这样做了。

编辑:澄清一下,我希望用户可以看到尾随斜杠,而不是 ?

【问题讨论】:

  • 你可以在/$1后面加一个斜杠=>/$1/
  • @ShaktiSingh: a) 这些更改不会发生在地址栏中(即用户永远不会在 url 中看到 ?)和 b) 如果查询字符串以 @987654330 结尾@然后我不想要另一个了。
  • RewriteCond %{REQUEST_URI} /page2/([^?].*)$ 将不匹配 /page2/?stuff(因为在这种情况下 %{REQUEST_URI} 将 = /page2/)。要匹配 QUERY STRING,您必须使用 RewriteCond %{QUERY_STRING} PATTERN_HERE - 查询字符串(在此特定示例中)将只是 stuff
  • @LazyOne:我试过了,即使它在服务器端更改了它,用户仍然看不到尾部斜杠,请参阅编辑
  • @qwertymk 试试这个:RewriteRule ^page1/(.*[^/])$ /page1/$1/ [L,R=301]。将 R 代码(重定向/结果代码)更改为您需要的任何内容:301 = 永久重定向,302 = 临时重定向。我建议从 302 开始,并在测试完成后更改为 301(因为现代浏览器会缓存重定向,这可能会导致测试/调试时受挫)。

标签: php .htaccess


【解决方案1】:

感谢@LazyOne 的链接,无论如何这有效:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

【讨论】:

    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 2019-06-18
    相关资源
    最近更新 更多