【问题标题】:.htaccess url rewriting not working?.htaccess url 重写不起作用?
【发布时间】:2014-10-31 17:13:21
【问题描述】:

老实说,我对.htaccess 的经验很少,因为我一直想尽我所能远离它。但是,我最近想整理我的网址,我发现可以通过.htaccess 和重写。

基本上,我想重写一个像这样的url:

www.mysite.com/profile.php?id=48194

类似于:

www.mysite.com/profile/48194

这是我目前拥有的代码:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^profile/(.*)/$ profile.php?id=$1

我尝试使用的行位于最底部,RewriteRule ^profile/(.*)/$ profile.php?id=$1。其余的用于从 url 中删除页面扩展。我已将 $1 更改为 $2 认为它可能与上面的代码冲突,但没有任何改变。

我还删除了除RewriteEngine on 之外的所有代码,最后一行认为代码可能存在冲突,但同样,没有任何改变或工作。其余代码确实有效,即从 url 中删除扩展名,所以我知道重写的事情正在进行中。

有人可以尝试分解并解释我做错了什么以及这一切是如何运作的吗?以及提供我正在尝试完成的事情的工作示例?

提前致谢!

【问题讨论】:

    标签: php apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    更改规则的顺序并使用MultiViews 选项。选项MultiViewsApache's content negotiation module 使用,该选项在mod_rewrite 之前运行,并使Apache 服务器匹配文件的扩展名。所以/file 可以在 URL 中,但它会服务于/file.php

    RewriteEngine on
    RewriteBase /
    
    RewriteRule ^profile/([^/]+)/?$ profile.php?id=$1 [L,QSA,NC]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
    RewriteRule ^(.+?)/?$ $1.php [L]
    

    【讨论】:

    • 抱歉回复晚了,最近忙于新工作。感谢您的回答!
    猜你喜欢
    • 2015-02-03
    • 2014-08-08
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多