【问题标题】:replace ? by / in urls and make them more friendly代替 ? by / in url 并使它们更友好
【发布时间】:2016-02-09 05:44:09
【问题描述】:

大家好,我有一个类似的网址

 http://www.domain.com/dash?do=about&w=me

但我想让它像

  http://www.domain.com/dash/about/me

我的 htaccess 文件中有这些东西。

     RewriteEngine On
     RewriteBase /
     Options All -Indexes
     RewriteCond %{REQUEST_METHOD} POST [NC]
    RewriteRule ^ - [L]
      ErrorDocument 403 /www.domain.com/error404.php
       RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.*$ [NC] 

       RewriteCond %{HTTPS} =on
       RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]

     RewriteCond %{HTTP_HOST} !^www\.
     RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

     # redirect /profile?eid=1 to /eid/1
   RewriteCond %{THE_REQUEST} \s/+profile(?:\.php)?\?(eid)=(\d+)\s [NC]
     RewriteRule ^ /%1/%2? [R=301,L]

     # internally rewrite /eid/1 to /profile.php?eid=1
     RewriteRule ^(eid)/(\d+)$ profile.php?$1=$2 [L,QSA,NC]

     # redirect /dept?did=1 to /did/1
     RewriteCond %{THE_REQUEST} \s/+dept(?:\.php)?\?(did)=(\d+)\s [NC]
    RewriteRule ^ /%1/%2? [R=301,L]

    # internally rewrite /did/1 to /dept.php?did=1
     RewriteRule ^(did)/(\d+)$ dept.php?$1=$2 [L,QSA,NC]

     # redirect /job-details?job=1 to /job/1
      RewriteCond %{THE_REQUEST} \s/+job-details(?:\.php)?\?(job)=(\d+)\s [NC]
     RewriteRule ^ /%1/%2? [R=301,L]

     # internally rewrite /job/1 to /job-details.php?job=1
     RewriteRule ^(job)/(\d+)$ job-details.php?$1=$2 [L,QSA,NC]

      RewriteCond %{THE_REQUEST} \s/+enterprise\.php\?url=([^\s&]+) [NC]
      RewriteRule ^ /%1? [R=301,L]

      RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
      RewriteRule ^ /%1 [R=302,L,NE]

     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
     RewriteRule ^(.+?)/?$ $1.php [L]

     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.+)$ enterprise.php?url=$1 [L,QSA]

任何人都可以提出一些建议来实现这一点吗?do=about&w=me comon 无处不在,只需要在页面之后像 /about/me 那样做。

【问题讨论】:

  • 您是否已将应用程序中的 URL 更改为 /dash/about/me? (虽然你说“到处都是通用的”,我猜你没有?)/dash?do=about&w=me 是文字 URL,还是 aboutme 变量?
  • 这些网址是否总是以/dash开头?
  • 没有网址可以以任何东西开头,并且我是可变的..
  • 你好@anubhava先生,你能帮我解决这个问题吗??

标签: .htaccess redirect


【解决方案1】:

由于规则太多,维护变得越来越困难,但这里是:

ErrorDocument 403 /www.domain.com/error404.php
Options All -Indexes
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_METHOD} POST [NC]
RewriteRule ^ - [L]

RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.*$ [NC] 
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# redirect /profile?eid=1 to /eid/1
RewriteCond %{THE_REQUEST} \s/+profile(?:\.php)?\?(eid)=(\d+)\s [NC]
RewriteRule ^ /%1/%2? [R=301,L]

# internally rewrite /eid/1 to /profile.php?eid=1
RewriteRule ^(eid)/(\d+)$ profile.php?$1=$2 [L,QSA,NC]

# redirect /dept?did=1 to /did/1
RewriteCond %{THE_REQUEST} \s/+dept(?:\.php)?\?(did)=(\d+)\s [NC]
RewriteRule ^ /%1/%2? [R=301,L]

# internally rewrite /did/1 to /dept.php?did=1
RewriteRule ^(did)/(\d+)$ dept.php?$1=$2 [L,QSA,NC]

# redirect /job-details?job=1 to /job/1
RewriteCond %{THE_REQUEST} \s/+job-details(?:\.php)?\?(job)=(\d+)\s [NC]
RewriteRule ^ /%1/%2? [R=301,L]

# internally rewrite /job/1 to /job-details.php?job=1
RewriteRule ^(job)/(\d+)$ job-details.php?$1=$2 [L,QSA,NC]

RewriteCond %{THE_REQUEST} \s/+enterprise\.php\?url=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=301,L]

RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=302,L,NE]

# /dash?do=about&w=me => /dash/about/me
RewriteCond %{THE_REQUEST} \s/+([^?]+)(?:.php)?\?do=([^&\s]+)&w=([^&\s]+)\s [NC]
RewriteRule ^ /%1/%2/%3? [R=301,L]

RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ $1.php?do=$2&w=$3 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ enterprise.php?url=$1 [L,QSA]

【讨论】:

  • 您好,先生,我知道问题所在,感谢您帮助我解决此问题,代码工作但更新此代码后某些图像没有显示..您能找到错误吗??跨度>
  • 检查后发现更新htaccess文件后图片的路径发生了变化..
  • 尊敬的先生,由于我以前的 htaccess 文件,我在 Opera mini 浏览器中找不到远程服务器.. 你能给我一些建议吗?
  • 这似乎是一个无关的问题。这个问题是针对处理/dash?do=about&w=me URL 的另一个问题。 /dash?do=about&w=me/dash/about/me 工作正常吗?
猜你喜欢
  • 2012-06-23
  • 1970-01-01
  • 2012-04-07
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2018-09-10
  • 2014-06-22
相关资源
最近更新 更多