【问题标题】:Rewrite URL with .htacess without changing address bar使用 .htaccess 重写 URL 而无需更改地址栏
【发布时间】:2013-08-08 02:20:54
【问题描述】:

我正在共享 HostGator 服务器上进行 LAMP 设置。我目前正在尝试创建更友好的网址。

我需要这样转发地址:

http://usafarmtrader.com/posts/city-state/title-3869.htm

到这里:

http://usafarmtrader.com/viewpost.php?id=3869

不改变地址栏。我当前的重写规则如下所示:

RewriteRule ^posts/(.*)/(.*)? http://usafarmtrader.com/viewpost.php?id=$2 [L,NC,P]

添加 P 标志是我可以在不更改地址的情况下加载它的唯一方法,但它似乎破坏了我的 javascript。

我需要做什么才能在不破坏 js 的情况下完成这项工作?和 重写规则中的正则表达式应该是什么样子才能将 id(应该是最后一个破折号之后的所有内容)放入该变量中?

这是我的整个 .htaccess 文件,以防有什么干扰:

#RewriteCond %{REQUEST_URI} !^/js/.*$
#RewriteCond %{REQUEST_URI} !^/img/.*$
#RewriteCond %{REQUEST_URI} !^/css/.*$
#RewriteCond %{REQUEST_URI} !^/inc/.*$
#RewriteCond %{HTTP_HOST} ^usafarmtrader.com$
#RewriteRule !^down\.php$ http://usafarmtrader.com/down.php [R=302,L]

ErrorDocument 404 /index.php

RewriteEngine On

RewriteRule ^(js|img|fonts)/ - [L]

#RewriteRule ^posts/(.*)/(.*)? http://usafarmtrader.com/viewpost.php?id=$2 [L,NC,P]
RewriteRule ^posts/[^/]+/[^.]+-([0-9]+)\.html?$ http://usafarmtrader.com/viewpost.php?id=$1 [L,NC]

RewriteCond %{SERVER_PORT} 80
RewriteRule ^mylistings\.php|login\.php|myaccount\.php|newaccount\.php|reset\.php|newpost\.php|editpost\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{SERVER_PORT} 443
RewriteRule ^about\.php|contact\.php|down\.php|faq\.php|find\.php|forgot\.php|home\.php|index\.php|viewpost\.php$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Google Analytics Integration - Added by cPanel.
<IfModule mod_substitute.c>
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|(<script src='/google_analytics_auto.js'></script>)?</head>|<script src='/google_analytics_auto.js'></script></head>|i"
</IfModule>
# END Google Analytics Integration

# Use PHP 5.3
AddHandler application/x-httpd-php53 .php

【问题讨论】:

    标签: regex .htaccess mod-rewrite url-rewriting friendly-url


    【解决方案1】:

    你不需要P 标志,因为这都在同一台服务器上,你不需要代理。您的模式很接近,但也匹配 URI 的 title.htm 部分。尝试类似:

    RewriteRule ^posts/[^/]+/[^.]+-([0-9]+)\.html?$ /viewpost.php?id=$1 [L,NC]
    

    【讨论】:

    • @Helto 抱歉,里面有一个流浪者)
    • 好的,它又可以工作了 :),但现在我又要让它更改地址了 :(
    • 感谢乔恩的帮助。我要给 HostGator 发送电子邮件,看看是否有共享帐户上的某些设置导致了这种情况。
    • @Helto http://usafarmtrader.com 在您的规则目标中是重定向的原因。如果有 http://,即使没有 R 标志,它也将始终隐式重定向。
    • @Helto 基础是一个完全不同的问题,您有相对链接,如果您更改路径,那么无论如何,所有相对链接都会中断。将此添加到页面标题:&lt;base href="/"&gt; 或将所有链接更改为绝对链接。
    猜你喜欢
    • 2013-06-11
    • 1970-01-01
    • 2012-10-28
    • 2014-08-17
    • 2010-11-21
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多