【问题标题】:Htaccess, redirecting to pretty urlHtaccess,重定向到漂亮的网址
【发布时间】:2015-10-04 17:11:15
【问题描述】:

我今天开始研究 Htaccess 并尝试了一下。我想要实现的是,每当您访问 localhost/index.php 时,它都会将您重定向到“漂亮”的 URL(在本例中为:localhost/home)。

这是我目前的 Htaccess 文件:

RewriteEngine on
RewriteRule ^home/?$ index.php [NC,L]

我知道我目前正在做的只是将 /home 重写为 /index.php 但我也不知道如何做相反的事情..

希望有帮助!

【问题讨论】:

    标签: .htaccess url rewriting


    【解决方案1】:

    你需要一个新的重定向规则:

    RewriteEngine on
    
    RewriteCond %{THE_REQUEST} /(home|index\.php)[?\s] [NC]
    RewriteRule ^(index\.php|home)$ / [NC,R=302,L,NE]
    
    RewriteRule ^home/?$ index.php [NC,L]
    

    【讨论】:

    • 你能解释一下你在这里做什么吗?我了解其中的大部分内容,但不幸的是不是全部:(
    • 条件检查THE_REQUEST(即原始请求,内部重写时不会改变,从而防止循环)看它是否包含/index.php。如果是这样,将该请求重定向到/home,状态码为302(用于临时重定向)。然后,将对/home的请求重写为index.php
    • @MikeRockett 谢谢你的解释,虽然他发送的代码不起作用..
    • @Bilal075 - 我刚刚在我的服务器上对其进行了测试,它确实有效。这就是你.htaccess 文件的全部内容了吗?
    • @MikeRockett 是的,只是复制了他发布的整个代码,但似乎没有工作
    【解决方案2】:

    您可以尝试以下条件和规则(评论解释):

    RewriteEngine On
    
    # Check that the request is for `index.php`
    # prevent infinite looping:
    RewriteCond %{REQUEST_URI} ^/index.php$ [NC]
    RewriteCond %{ENV:REDIRECT_STATUS} !200
    
    # If the conditions match, redirect to `/home`:
    RewriteRule ^ /home [R=302,L,NE]
    
    # Serve `index.php` for requests made to `/home`
    RewriteRule ^home/?$ /index.php [NC,L]
    

    【讨论】:

    • 我仍然可以访问 index.php 文件而不会被重定向。重写 /home 工作虽然除此之外,我的设置是正确的
    • 确实很奇怪 - 我想不出它为什么会这样做。
    • 当然,我想过将每个请求(正在发出)发送到 header.php(包含在每个文档中),然后验证他请求的内容,然后将他重定向到“漂亮”的网址。
    • 不过,这很乏味。代码应该可以正常工作。我想知道如果禁用 MultiViews 是否会起作用...尝试在顶部添加Options -Multiviews。 (不过,这真的只是一个疯狂的猜测。)
    • 是的,但似乎无法使用其他方式解决问题。使用 Options -Multiviews 似乎也不起作用。
    猜你喜欢
    • 2016-06-23
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2012-06-05
    相关资源
    最近更新 更多