【问题标题】:mod rewrite with dotsmod用点重写
【发布时间】:2012-03-12 17:15:46
【问题描述】:

我想改变一个网址,如:localhost/site/home.php?p=indexlocalhost/site/index

我在我的 htaccess 文件中使用此代码

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/?$ home.php?p=$1 [L,NS] 

但是当我像 localhost/site/home.php?p=profile.user 这样写时,我得到了 404 错误,然后转到这个链接

localhost/profile.user

那我该如何解决它

谢谢

【问题讨论】:

  • 你还有哪些重写规则?您必须发布详细信息。
  • RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/?$ home.php?p=$1 [L,NS]
  • 这里没有任何错误。你确定你没有遗漏任何其他细节吗?并通过编辑问题本身来更新任何详细信息。
  • 我很惊讶没有人发现错误的重写方式!数周无人接听。

标签: .htaccess mod-rewrite apache2


【解决方案1】:

让我们先看看你的重写:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/?$ home.php?p=$1 [L,NS] 

这是相对重写:替换文本home.php... 不以斜杠开头。每个目录上下文中的相对重写(<Directory>.htaccess)需要配置 RewriteBase 指令,否则它们会做错事。

其次,您的规则是倒退的,如果要将home.php URL 重写为site/index,则必须将home.php 匹配放在左侧,将site/index 放在右侧:

RewriteRule ^home.php?p=(.*) /site/$1

请注意,我进行了绝对重写。这意味着 mod_rewrite 将通过在其上粘贴http://example.com 来创建一个重写的 URL。现在在内部为http://example.com/site/<whatever> 生成一个新请求。我们可以不使用RewriteBase 就可以逃脱,因为我们没有相对的重写。

至于您的最后一个问题,尚不清楚为什么当您访问localhost/site/home.php?p=profile.user 时,您会被带到localhost/profile.user。我怀疑可能是您的home.php 脚本在这样做。您是在尝试使用 mod_rewrite 劫持特定类型的 PHP 请求并将其发送到其他地方,对吧?

【讨论】:

  • 我认为他没有正确表达自己。很多人实际上都是这样做的:他们没有说“我想将localhost/site 重写为home.php?blabla,而是说相反,这既是错误也是错误的。
【解决方案2】:

你的意思大概是:你想这样重写:

http://mysite.com/index => http://mysite.com/home.php?p=index

所以这应该可以工作

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?$ /home.php?p=$1 [QSA,L] 

如果你想要相反的

http://mysite.com/home.php?p=index => http://mysite.com/index

这应该可行:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule /home\.php$ / [QSA,L] 

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多