【问题标题】:Vanity URLs with .htaccess带有 .htaccess 的虚 URL
【发布时间】:2017-09-18 17:44:03
【问题描述】:

我需要实现虚 URL,这是我的 .htaccess 文件

# check if mod_rewrite is present
<IfModule mod_rewrite.c>

  #turns it on
  RewriteEngine on

  #if the requested url isn't a file or a dir
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d

  #if the request does not end with .gif, .png or .jpg
  RewriteCond %{REQUEST_URI} !(\.gif|\.jpg|\.png)$ [NC]

  #process book.php, no matter what was in the url
  RewriteRule ^(.*)$ /book.php?book_id=$1 [L,QSA]

</IfModule>

这个翻译工作正常。

www.mydomain.com/foo -> www.mydomain.com/book.php?book_id=foo

现在我需要一个更具体的条件:

www.mydomain.com/foo/readers -> www.mydomain.com/book.php?book_id=foo&readers=1

虽然readers 没有改变,但foo 是一个随机字符串,我想检查这个特定的网址

www.mydomain.com/foo/readers -> valid
www.mydomain.com/foo/readers?q=hello -> valid
www.mydomain.com/foo/reader -> invalid
www.mydomain.com/foo/readers/bar -> invalid
www.mydomain.com/foo/bar/readers -> invalid

#I tried many solutions like this but i can't get the desired result
RewriteRule ^(.*)[/]readers /book.php?book_id=$1&readers=1 [L,QSA]

【问题讨论】:

    标签: .htaccess vanity-url


    【解决方案1】:

    您需要在您的规则中使用锚点,并使尾随斜杠可选:

    RewriteRule ^([^/]+)/readers/?$ /book.php?book_id=$1&readers=1 [L,QSA,NC]
    

    【讨论】:

    • 太完美了。谢谢
    • 嗨,我在尝试通过单击按钮更改此 url 上的哈希时遇到问题:www.mydomain.com/foo/readers -> window.location.hash = '#something'; 我不明白为什么 www.mydomain.com/foo/readers/#somethingwww.mydomain.com/foo/readers#something 是重定向。
    • 接下来几天我正在使用手机。执行 JS 代码后,您面临的具体问题是什么?它是否会触发对 Web 服务器的请求?
    • 是的,它重定向到www.mydomain.com/foo。但很奇怪,如果我在Chrome 控制台中写window.location.hash = '#something'; 效果很好,如果我使用jquery 实现按钮单击它效果很好(所以我解决了但我不明白)。问题是当我使用href="javascript:myMethod();" 时它不起作用。 (myMethod(window.location.hash = '#something';))
    • 我相信这是因为 # 之后的部分是在 JS 本身中处理的,并没有传递给 Apache。
    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2014-09-24
    • 2016-04-10
    • 1970-01-01
    • 2014-02-26
    • 2013-03-24
    相关资源
    最近更新 更多