【问题标题】:htaccess adding .php to the end of $_GET variables when adding slashhtaccess 在添加斜杠时将 .php 添加到 $_GET 变量的末尾
【发布时间】:2017-08-08 04:08:48
【问题描述】:

我试图创建一点点 htaccess 来改变 URL 之类的东西

http://localhost/website/page.php?id=_abc-123

http://localhost/website/page/_abc-123

它在大多数情况下都有效,因为我可以访问该页面而不会遇到scriptsCSS 文件的问题。但是,如果我尝试回显$_GET["id"],而不是得到_abc-123,我将得到_abc-123.php

这是我目前在 htaccess 文件中的内容:

Options +FollowSymLinks

# remove extensions
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

# movie page
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^page/([^/]*)$ page.php?id=$1 [L]

感谢所有帮助,

谢谢。

【问题讨论】:

  • 不要使用mod-rewrite 隐藏文件扩展名,这就是MultiViews 的用途。所发生的一切是您的第一个重写规则与您想要的 URL 匹配并重定向到 page/_abc-123.php,然后您的第二个规则将接收该 URL

标签: php apache .htaccess mod-rewrite


【解决方案1】:

先测试电影页面,再测试.php文件是否存在:

Options +FollowSymLinks -MultiViews
RewriteEngine On

# movie page
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^page/([^/]*)$ page.php?id=$1 [L]

# remove extensions
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^.]+)/?$ $1.php [L]

【讨论】:

    【解决方案2】:

    首先,如果您不确定自己的错误出在哪里,可以尝试使用 .htaccess 的在线工具,例如 htaccess.mwl.be

    显然,您的第一个 RewriteRule 条件得到满足,这会导致您的“错误”。

    借助这个工具和一些关于正则表达式如何工作的知识,我们可以修复你的 .htaccess 到这个:

    Options +FollowSymLinks
    
    # remove extensions
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^\.]+)$ $1.php [NC]
    
    # movie page
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^page/([^/]*)$ page.php?id=$1 [L]
    

    我唯一更改的是从您的第一个 RewriteRule 中删除“L”标志,因为它的 RewriteCond 已满足,但我们需要它通过第二个 RewriteRule

    有关 L 标志的更多信息,请查看documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      • 1970-01-01
      相关资源
      最近更新 更多