【问题标题】:mod_rewrite and URL conflictmod_rewrite 和 URL 冲突
【发布时间】:2014-03-23 00:37:52
【问题描述】:

我正在开发一个网站以获取有关其他网站的信息。 我想做的是这样的:

myurl.com/site/example.com -> 原始网址是 myurl.com/work.php?query=example.com.

而且,我知道该怎么做。

但问题是当我把 example.com 放在 http://https:// 之前“干净”的 URL,服务器理解另一件事:

未找到在此服务器上未找到请求的 URL /site/http://www.example.com

我的 .htaccess 文件现在是:

RewriteEngine On
RewriteRule ^q/([^/]*)$ /?id=$1 [L]

我可以做些什么来让它正常工作?

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    你的模式:([^/]*) 匹配任何不是/的东西。因此,如果您在“example.com”前面添加“http://”或“https://”,那么其中有 /,其中两个,因此您的模式将拒绝匹配它。您可以尝试为 http 部分创建一个可选匹配项:

    RewriteEngine On
    RewriteRule ^q/(?:https?://|)([^/]*)$ /?id=$1 [L]
    

    或将([^/]*) 模式更改为也匹配/

    RewriteEngine On
    RewriteRule ^q/(.*)$ /?id=$1 [L]
    

    【讨论】:

    • 我使用RewriteEngine On RewriteRule ^q\/([a-zA-Z0-9/_.]+)$ /?id=$1 [L] RewriteRule ^q\/http:\/([a-zA-Z0-9/_.]+)$ /?id=$1 [L] RewriteRule ^q\/https:\/([a-zA-Z0-9/_.]+)$ /?id=$1 [L] 解决了但您的解决方案更干净。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多